[编程珠玑]取样问题
input:m,n and m<n
output:a sorted list of m random integers in the range 0...n-1
View Code
1 void genknuth(int m,int n) 2 { 3 for(int i=0;i<n;++i) 4 { 5 if((bigrand()%(n-i))<m) 6 { 7 cout <<i<<endl; 8 --m; 9 } 10 } 11 } 12 13 14 void gensets(int m,int n) 15 { 16 set<int> S; 17 while(S.size()<m) 18 { 19 S.insert(bigrand()%n); 20 } 21 } 22 23 24 void genshuf(int m,int n) 25 { 26 int* x=new int[n]; 27 for(int i=0;i<n;++i) 28 x[i]=i; 29 for(int i=0;i<m;++i) 30 { 31 int j=randint(i,n-1); 32 swap(x[i],x[j]); 33 } 34 sort(x,x+m); 35 }