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;
}
}