撲克洗牌演算法

2021-08-14 14:39:23 字數 1066 閱讀 4191

最近看到了遇到面試題,內容是以最快的方法將一副撲克牌重洗?覺得挺有意思,總結了三種方法,下面的的**是用js,呵呵,下面是**。

functionshuffle() 

};//洗牌方法1

this.shuffle1=function()

returnarr3;

};//最簡單粗暴的一種方法

this.shuffle2=function()

returnarr3;

};//還有一種比較好的方法,這種方法的大概思路是54次迴圈,當迴圈到i位置時,次位置的元素就與它時候的任一元素元素位置

this.shuffle3=function() ;

returnarr;

} }

varshuffle=newshuffle();

// shuffle.newarr();

// console.time("1");

// shuffle.shuffle1();

// console.timeend("1");

// shuffle.newarr();

// console.time("2");

// shuffle.shuffle2();

// console.timeend("2");

// shuffle.newarr();

// console.time("3");

// shuffle.shuffle3();

// console.timeend("3");

撲克洗牌演算法

card list for i in range 1 55 card list copy.deepcopy card list 為保證原資料不被改變,對原列表進行深拷貝乙份 for i in range 1 54 index random.randint i,54 card list i 1 car...

撲克牌洗牌演算法 random shuffle

撲克牌洗牌有多種演算法 第1個 每次從原陣列a取出範圍 1,i 的數放入b陣列。缺點是每次都要將陣列i後面的元素進行移動。是乙個o n2 演算法 void xipai int n n for int i 1 i x i 第2種 每次取範圍 1,i 1 的數,然後與最後乙個元素做交換。這樣的複雜度優化...

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

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