การสับเปลี่ยนลำดับ vector สามารถทำได้ด้วยอัลกอริทึม Fisher-Yates shuffle ซึ่งจะทำการสแกน vector แบบเชิงเส้น จากนั้นสลับแต่ละสมาชิกกับสมาชิกสุ่มหนึ่งตัวจากสมาชิกที่เหลือทั้งหมด รวมถึงตัวมันเองด้วย
อัลกอริทึม
เริ่มต้น
ประกาศฟังก์ชัน show()
ส่ง constructor ของ vector เป็นพารามิเตอร์ในฟังก์ชัน show()
for (auto const& i: input)
แสดงค่าของตัวแปร i
ประกาศ v เป็น vector
กำหนดค่าเริ่มต้นให้ v vector แบบอาร์เรย์
ประกาศตัวแปร size เป็น integer
เรียกฟังก์ชัน size() เพื่อหาขนาดของ vector
กำหนด size = v.size()
for (int i = 0; i < size - 1; i++)
int j = i + rand() % (size - i)
เรียกฟังก์ชัน swap() เพื่อสลับค่าของ v[i] และ v[j]
แสดงข้อความ "สมาชิกหลังสับเปลี่ยนแล้ว"
เรียกฟังก์ชัน show() เพื่อแสดงค่าของ v vector ที่สับเปลี่ยนแล้ว
สิ้นสุด
ตัวอย่างโค้ด
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
void show(vector<int> const &input) {
for (auto const& i: input) {
std::cout << i << " ";
}
}
int main() {
srand(time(0)); // เริ่มต้น random seed
vector<int> v = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int size = v.size();
for (int i = 0; i < size - 1; i++) {
int j = i + rand() % (size - i);
swap(v[i], v[j]);
}
cout << "สมาชิกหลังสับเปลี่ยนแล้ว" << endl;
show(v);
return 0;
}
ผลลัพธ์
สมาชิกหลังสับเปลี่ยนแล้ว 2 8 5 3 1 9 4 7 6