如何將一個有序的數組隨機排序?
01-07
Fisher–Yates,可以保證每一種排列等概率注意每次隨機挑兩個項交換,重複 N 次的做法是不行的,會導致某些排列出現的概率增大
如何測試洗牌程序
random_shuffle
演算法課上學的,還有數學證明其正確性。
假設有數組Array,長度為N。
while(N&>0){
生成0到N-1之間的隨機數Random;
swap(Array[Random],Array[N-1];
N--;
}
洗牌,筆試面試常考。
Fisher-Yates演算法。簡單來說就是循環一遍數組,將當前數據與該數據之前的隨機一個數值交換。
洗牌演算法咯
產生隨機序列,把隨機序列當做數組的排序關鍵字排序。
swap(arr[0], arr[arr[0]%arr.length]);時間複雜度為O(1),正兒八經的偽隨機
推薦閱讀:
※從事C#開發兩年,25歲轉Cocos2d-x開發,會不會太晚?
※C/C++ 中 bool 相比於 char 有什麼優勢?為什麼要設立 bool 類型?
※二級C習題10.10為什麼選C?
※有必要在寫 C++ 時避免隱式轉換嗎?
※C++中如何載入100K+的常數數組?
TAG:CC |