洗牌算法

来源:互联网 发布:python read csv 编辑:程序博客网 时间:2024/06/06 08:36

要求:给定N张扑克牌和一个随机函数,设计一个洗牌算法。


代码1:

void shuffle1(int *x, int n){int idx;srand(time(0));for (int i = 0; i < n; ++i){idx = rand() % (n - i) + i;swap(x[i], x[idx]);}}
这个代码是“从头到尾”洗牌,即第i张牌和[i,n-1]位置的随机一张牌进行交换。rand() % (n - i) + i 得到[i,n-1]之间的随机数。


代码2:

void shuffle2(int *x, int n){int idx;srand(time(0));for (int i = n - 1; i >= 0; --i){idx = rand()%(i+1);swap(x[i], x[idx]);}}

这个代码是“从尾向头”洗牌,即第i张牌和[0,i]位置的随机一张牌进行交换。rand()%(i+1) 得到[0,i]之间的随机数。

原创粉丝点击