0
点赞
收藏
分享

微信扫一扫

整点没用的——Knuth洗牌算法

芭芭蘑菇 2022-03-30 阅读 63
c++算法

简介

这个算法只有两行,却可以实现这个功能:对于给定的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]之间的随机整数。

举报

相关推荐

0 条评论