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

#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;
}

posted @ 2023-11-16 16:40  可爱的卤蛋  阅读(25)  评论(0编辑  收藏  举报