[编程珠玑]取样问题

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 }

你可能感兴趣的:(编程珠玑)