C++ 程式,實現斐雪-耶滋演算法對陣列進行洗牌


斐雪-耶滋演算法生成陣列元素的隨機排列,換句話說它隨機打亂陣列中的所有元素。由於斐雪-耶滋演算法是無偏的,因此陣列的所有排列都具有同等機率。

一個在 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] << " ";

更新於: 25-Jun-2020

698 次瀏覽

開始你的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.