这种洗牌方式的算法:
1:初始化一个长度为54的数组,和54张牌。
2:从i=1开始到54,每次从剩余的牌堆中随机抽一张牌放到数组的i下标下。
这样我们可以用一个数组做也可以用两个数组做。
就和经典的选择排序一样。
-
#include<stdio.h>
-
#include<time.h>
-
#include<stdlib.h>
-
#include<string.h>
-
#include<vector>
-
#include<algorithm>
-
#define POKER_NUM 54
-
int poker[
54];
-
void iniPoker()
-
{
-
for(
int i=
0;i<POKER_NUM;i++)
-
{
-
poker[i]=i+
1;
-
}
-
}
-
void suffle()
-
{
-
for(
int i=
0;i<POKER_NUM;i++)
-
{
-
int index=rand()%(POKER_NUM-i)+i;
//获取从i~POKER_NUM的一个索引
-
std::swap(poker[i],poker[index]);
//交换
-
}
-
}
-
void printPoker()
-
{
-
for(
int i=
0;i<POKER_NUM;i++)
-
{
-
if(i%
9==
0)
printf(
"\n");
-
printf(
"%4d",poker[i]);
-
}
-
}
-
int main()
-
{
-
srand(time(
NULL));
-
iniPoker();
-
printPoker();
-
suffle();
-
printf(
"\n-------------------------------------------------------------\n");
-
printPoker();
-
}