Knuth重排算法,又稱洗牌算法,費歇爾算法。是一種很簡單的洗牌算法,在遊戲工程中可能用到,在這裏整理一下。
C++實現:
void ShuffleVector(vector<int>& numbers) {
for (int i = 0; i < numbers.size(); i++) {
//根據系統時間設計隨機數種子,否則每次洗牌得到的結果將相同
srand(static_cast<unsigned>(time(NULL)));
//得到i至numbers.size()範圍內的一個隨機數
int r = i + rand() % (numbers.size() - i);
int tmp = numbers[i];
numbers[i] = numbers[r];
numbers[r] = tmp;
}
}