最近看到了遇到面試題,內容是以最快的方法將一副撲克牌重洗?覺得挺有意思,總結了三種方法,下面的的**是用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...