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] << " ";
广告