随机生成k个不重复的随机数(或生成0至k-1以随机顺序构成的数列)
rand不直接产生值,而是产生下标,下标可以重复,但要保证数组中都是不重复且没有输出过的数字
①一个大小为k的数组temp,temp[i]=i;一个随机下标的范围range,range初始为k;一个随机数组result
②随机生成0至range-1的一个下标index,将temp[index]放入result
③temp[index]=temp[range-1]
④range--,转②
#pragma once #include<iostream> #include<vector> #include<time.h> using namespace std; //返回k个不同随机数按序组成的vector(以随机顺序返回0至k-1构成的vector vector<int> diffRand(int k) { vector<int> result(k); vector<int> flag(k); for (int i = 0; i < k; i++) flag[i] = i; int range = k;//随机下标的范围 srand((unsigned int)time(0)); for (int i = 0; i < k; i++) { int randIndex = rand() % range; result[i] = flag[randIndex]; flag[randIndex] = flag[range - 1]; range--; } return result; } void main() { vector<int> result = diffRand(10); for (int i = 0; i < (int)result.size(); i++) cout << result[i] << ' '; cout << endl; system("pause"); }
原文地址:http://blog.csdn.net/hgqqtql/article/details/44261777