撲克牌洗牌有多種演算法:
第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之間的數,看這個位置是...