方法1:

 1 void rand1(int n,int m)
 2 {
 3     for(int i=0;i<n;++i)
 4         if(rand()%(n-i)<m)//用n-i比再定义一个num记录还剩几个更好
 5         {
 6             cout<<i<<" ";
 7             --m;
 8         }
 9     cout<<endl;
10 }

方法2:

1 void rand2(int n,int m)
2 {
3     set<int> num;
4     while(num.size()<m)
5         num.insert(rand()%n);
6     for(set<int>::iterator iter=num.begin();iter!=num.end();++iter)
7         cout<<*iter<<" ";
8     cout<<endl;
9 }

方法3:

 1 inline void swap(int *arr,int i,int j)
 2 {
 3     if(i==j)//一定记得要交换的两个元素相同时返回,否则返回总是0
 4         return;
 5     arr[i]=arr[i]^arr[j];
 6     arr[j]=arr[i]^arr[j];
 7     arr[i]=arr[i]^arr[j];
 8 }
 9 
10 void qsort(int *arr,int l,int u)
11 {
12     if(l>=u)
13         return;
14     int m=l;
15     for(int i=l+1;i<=u;++i)
16         if(arr[i]<arr[l])
17             swap(arr,i,++m);
18     swap(arr,l,m);
19     qsort(arr,l,m-1);
20     qsort(arr,m+1,u);
21 }
22 
23 void rand3(int n,int m)
24 {
25     int *num=new int[n];
26     for(int i=0;i<n;++i)
27         num[i]=i;
28     for(int i=0;i<m;++i)
29         swap(num,i,rand()%(n-i)+i);//是randint(i,n-1)而不是rand()%n
30     qsort(num,0,m-1);
31     for(int i=0;i<m;++i)
32         cout<<num[i]<<" ";
33     cout<<endl;
34     delete []num;
35 }

测试程序:

 1 int main()
 2 {
 3     srand(time(NULL));
 4     int n,m;
 5     cout<<"input n and m:"<<endl;
 6     cin>>n>>m;
 7     rand1(n,m);
 8     rand2(n,m);
 9     rand3(n,m);
10     return 0;
11 }

 

posted on 2013-03-20 11:33  particle  阅读(401)  评论(0编辑  收藏  举报