Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อใช้อัลกอริทึมของ Fisher-Yates สำหรับการสลับอาร์เรย์


อัลกอรึทึมของ 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] << " ";