简介
这个算法只有两行,却可以实现这个功能:对于给定的n个元素生成一个排列,每一个元素都能等概率地出现在每一个位置。
#include <iostream>
using namespace std;
const int N = 1001;
int card[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> card[i];
srand((int)time(0)); //设置随机数种子来让每次运行取的随机数不一样
for (int i = n - 1; i >= 0; i--)
swap(card[i], card[rand() % (i + 1)]);
for (int i = 0; i < n; i++)
cout << card[i] << ' ';
return 0;
}
其中,rand() % (i + 1)
的作用是生成[0, i]
之间的随机整数。