經典洗牌演算法C語言實現
阿新 • • 發佈:2019-02-10
這種洗牌方式的演算法:
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(); }