撲克牌洗牌演算法 random shuffle

2021-10-24 04:12:52 字數 882 閱讀 1007

撲克牌洗牌有多種演算法:

第1個:每次從原陣列a取出範圍[1,i]的數放入b陣列。 缺點是每次都要將陣列i後面的元素進行移動。 是乙個o(n2)演算法

void

xipai

(int n)

n--;}

for(

int i =

1; i <= x; i++

)}

第2種:每次取範圍[1,i - 1]的數, 然後與最後乙個元素做交換。這樣的複雜度優化成o(n), 在c++ stl可以直接用random_shuffle(), 或者自己造輪子,如**。

void

xipai2

(int n)

for(

int i =

1; i <= n; i++

)}

完整**如下:

#include .h>

using namespace std;

const

int n =60;

int a[n]

;int b[n]

;void

ini()}

void

xipai

(int n)

n--;}

for(

int i =

1; i <= x; i++)}

void

xipai2

(int n)

for(

int i =

1; i <= n; i++)}

intmain()

洗牌演算法(打亂撲克牌順序)

問題描述 有乙個大小為 n 的有序陣列,如何打亂元素順序,使得任一元素在陣列的任一位置出現的概率都為 1 n?也就是說對於大小為 n 的有序陣列,有 n!種排列方式,要求能等概率的得到這 n!種結果。思路一 每次從原始陣列中隨機取乙個之前未取過的元素,新增到新陣列中。選取方法是 生成乙個 1 rem...

撲克牌洗牌樣例

從網上摘抄的乙個洗牌程式的樣例 清雨空間與您分享程式設計的樂趣 以下是乙個基於c語言編寫的隨機 洗牌程式,程式先按順序生成一副紙牌,顯示紙牌,輸入洗牌次數,開始隨機洗牌,顯示洗牌結果 program by norm jen,include include includeint card 2 52 i...

洗牌 發牌演算法 打亂撲克牌順序

洗牌的演算法有很多,這裡主要介紹下幾種主要的演算法。方法一 每次找乙個隨機的位置,然後將這54個數放到找的位置中。步驟 1.用乙個整型陣列記錄各個位置是否已經放置了數,如果放置了則不為0,否則為0。所以在演算法開始的時候,初始化此陣列每個元素的值都為0.2.每次產生乙個0 53之間的數,看這個位置是...