洗牌算法
一个简单的洗牌算法
思路如下:
遍历待洗牌的数组,在遍历数组中的每一个数时,从数组中随机选取一个数,和当前下标的这个数做交换,当数组遍历完成时这个数组就被打乱了。
这个洗牌算法的思路相当于在数组中随机填入待洗牌数组中的数,且不用考虑重复的问题,没有额外的内存空间的开销,每一个数在每一个位置存在的概率都是1/n。
下面是代码
void Shuffe(vector<int>& a, int n)
{
for (int i = n - 1; i > 0; --i)
{
srand((unsigned)time(NULL));
swap(a[i], a[rand() % (i + 1)]);
}
}