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);