[编程珠玑]取样问题

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 }
posted @ 2012-05-03 10:43  Cavia  阅读(226)  评论(0编辑  收藏  举报