Knuth重排算法

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