随机产生n个数的排列(Fisher-Yates洗牌算法)

发布时间 2023-11-16 16:45:57作者: 可爱的卤蛋
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
// Fisher-Yates洗牌算法
void shuffle(int n)
{
    srand(time(NULL));
    for (int i = n; i > 1; i--)
    {
        int j = rand() % i + 1;
        swap(a[i], a[j]);
    }
}
int main()
{
    int n;
    scanf("%d", &n);

    for (int i = 1; i <= n; i++) a[i] = i;
    //调用函数
    shuffle(n);

    for (int i = 1; i <= n; i++)
        printf("%d ", a[i]);
    return 0;
}