洗牌算法(C++)
事先说明
数组重排
vector<int> Testlib::shuffle(vector<int> num)
{
int k;
uint numsize=num.size();
for(int i=0;i<static_cast<int>(numsize);i++)
{
k=rand()%(static_cast<int>(numsize)-i);
num.push_back(num[static_cast<uint>(k)]);
num.erase(num.begin()+k);
}
return num;
}
简单说明
简单原理就是每次从原数组中找一个数放到数组最后,且保证原数组中的每个数字全部且仅参与一次排序,最终实现所有的顺序的概率相等。