// 洗牌函数
void shuffle(int* card, int nLen)
{
for(int i=nLen-1; i>0; --i)
{
int r = rand()%(i+1);
if(r != i)
std:swap(card[r], card[i]);
void shuffle(int* card, int nLen)
{
for(int i=nLen-1; i>0; --i)
{
int r = rand()%(i+1);
if(r != i)
std:swap(card[r], card[i]);
}
// 标准库 std::random_shuffle
// 更多讨论,参见 http://zhidao.baidu.com/question/437676076.html
// 第5个算法的理解:在已经洗牌的N个数中,随机挑选一个数与第N+1个数交换,则实现N+1个数洗牌
// 另外,普通的随机数由于其周期小于54!,所以不能实现完全随机洗牌,
// 参见 http://www.programfan.com/club/showpost.asp?id=137039&t=o