洗牌程式的兩種實現方法比較

2021-06-27 22:45:58 字數 515 閱讀 3390

size_t shuffle22(int s, int

n)

for (int i=n-1; i>0; --i)

}return

t;}

因為"第1次移動後,第1個數還在第1個位置的概率是1/n,後續移動只會減少這個概率。所以這個演算法不是完全隨機的"。修改後的演算法其實就是使用c++的stl庫中的random_shuffle()函式的實現方法。取隨機數的時候的範圍每次都隨著i的改變而變動,這樣就不會減少之前的位置的數還是原來的數的概率了(即後續交換操作不會影響到已經交換過的位置)。

使用標準庫中的random_shuffle()函式實現很簡單,**如下:

洗牌程式的兩種實現方法比較

首先,我介紹一種很常見的方法 隨機生成法 我自己命名的 這方法我在掃雷遊戲中隨機分布雷的位置時用過 思想是一樣的 該方法要點就是從頭開始逐個隨機生成規定區域的數字,如果新生成隨機數之前已經生成過就不儲存該數 如果新生成的隨機數之前沒有生成過就儲存該數 直到生成的數字的數量達到所需的數量。實現 如下 ...

兩種洗牌演算法比較

演算法1原理 1.用乙個整型陣列記錄各個位置是否已經放置了數,如果放置了則不為0,否則為0。所以在演算法開始的時候,初始化此陣列每個元素的值都為0.2.每次產生乙個0 53之間的數,看這個位置是否放置了數,如果已經放置了,則繼續採用同樣的方法找乙個隨機的位置進行判斷,如果這個位置還未放置,則設定此位...

TreeSet兩種自然比較方法

一 1.用treeset集合儲存自定義物件,無參構造方法使用的是自然排序對元素進行排序的自然排序,2.就是讓元素所屬的類實現comparable介面,重寫compareto t o 方法 3.重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫 public class student...