题目:给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。
思路:54张牌用0-53表示,放在数组中,数组下标表示牌所在的位置。遍历数组,产生随机数,交换以随机数为下标的数和当前数组元素。复杂度为O(n)。
void shuffle(int boke[])
{
int i,r,t;
srand((unsigned)time(NULL)); //random number seed
for(int i=0;i<54;i++)
{
r=(rand()%107)/2;
//swap
t=boke[i];
boke[i]=boke[r];
boke[r]=t;
}
}
参考: http://blog.youkuaiyun.com/zhanxinhang/article/details/6655144