实现一个方法,随机从一个大小为n的数组中选取m个数。要求每个元素被选中的概率相等。
思路:
这个题的思路和20.2的一样,只不过是选取m个。
#include <iostream> #include <vector> using namespace std; void Swap(int& a, int& b) { int temp = a; a = b; b = temp; } void RandomShuffle(vector<int>& ivec, int m) { int len = ivec.size(); for (int i = 0; i < m; ++i) { int temp = rand() % (len - i) + i; Swap(ivec[i], ivec[temp]); } } int main() { vector<int> ivec; for (int i = 1; i < 53; ++i) ivec.push_back(i); int m = 10; RandomShuffle(ivec, m); for (int i = 0; i < m; ++i) cout << ivec[i] << endl; return 0; }