std::vector<int> Random(std::vector<int> a, int K)
{
std::vector<int> r;
std::random_device generator;
int N = a.size();
int c = N - 1;
while (c >= N - K)
{
std::uniform_int_distribution<int> dist(0, c);
auto d = dist(generator);
r.push_back(a[d]);
std::swap(a[d], a);
c--;
}
return r;
}
需要注意的问题:
第9行随机数是闭区间;
第9行区间的上界是递减的;
第9行区间的上界是从N-1开始而不是K-1开始(这点有可能不小心会写成K-1);