อัลกอรึทึมของ Fisher-Yates สร้างการเรียงสับเปลี่ยนแบบสุ่มขององค์ประกอบอาร์เรย์ เช่น การสุ่มสับเปลี่ยนองค์ประกอบทั้งหมดของอาร์เรย์ พีชคณิตทั้งหมดสำหรับอาร์เรย์มีแนวโน้มเท่าเทียมกันเนื่องจากอัลกอริธึมของ Fisher-Yates เป็นกลาง
โปรแกรมสำหรับใช้ Fisher-Yates Algorithm สำหรับการสับเปลี่ยนอาร์เรย์ใน C++ มีดังนี้ -
ตัวอย่าง
#include <iostream> #include <t;stdlib.h> using namespace std; int main() { int n; cout << "Enter the array size: "<<endl; cin >> n; int arr[n], arr1[n], index_arr[n]; int index; cout << "Enter the array elements: "<<endl; for (int i = 0; i < n; i++) cin >> arr[i]; for (int i = 0; i < n; i++) index_arr[i] = 0; for (int i = 0; i < n; i++) { do { index = rand() % n; } while (index_arr[index] != 0); index_arr[index] = 1; arr1[i] = arr[index]; } cout<<"The shuffled array is: "; for (int i = 0; i < n; i++) cout << arr1[i] << " "; return 0; }
ผลลัพธ์
ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้
Enter the array size: 10 Enter the array elements: 1 2 3 4 5 6 7 8 9 10 The shuffled array is: 4 7 8 6 3 10 2 1 9 5
ในโปรแกรมข้างต้น ผู้ใช้จะขอขนาดของอาร์เรย์และอาร์เรย์ ด้านล่างนี้ −
cout << "Enter the array size: "<<endl; cin >> n; int arr[n], arr1[n], index_arr[n]; int index; cout << "Enter the array elements: "<<endl; for (int i = 0; i < n; i++) cin >> arr[i];
หลังจากได้รับอาร์เรย์แล้ว index_arr[] จะเริ่มต้นเป็น 0 จากนั้นฟังก์ชัน rand() จะถูกใช้เพื่อสุ่มเก็บค่าของ arr[] ลงใน arr1[] สิ่งนี้แสดงให้เห็นโดยข้อมูลโค้ดต่อไปนี้ -
for (int i = 0; i < n; i++) { do { index = rand() % n; } while (index_arr[index] != 0); index_arr[index] = 1; arr1[i] = arr[index]; }
ในที่สุดอาร์เรย์ที่สับเปลี่ยนจะปรากฏขึ้น ด้านล่างนี้ −
cout<<"The shuffled array is: "; for (int i = 0; i < n; i++) cout << arr1[i] << " ";