两种洗牌算法
#pragma once
#include<vector>
class Shuffle {
public:
//某一个元素放在第i个位置上的概率为:
//(n-1)/n * (n-2)/(n-1) *...* (i+1)/(i+2) * 1/(i+1)
//=1/n
void shuffle1(std::vector<int>&nums) {
for (int i = nums.size() - 1; i >= 0; --i) {
std::swap(nums[i], nums[rand() % (i + 1)]);
}
}
void shuffle2(std::vector<int>& nums) {
for (int i = 0; i < nums.size(); ++i) {
std::swap(nums[i], nums[rand() % (i + 1)]);
}
}
};
参考:https://blog.csdn.net/qq_26399665/article/details/79831490