#include<iostream> #include<cstdlib> #include<ctime> using std::endl; using std::cin; using std::cout; int partition(int *a,int l,int r); int select(int *a,int l,int r,int i); void swap(int *a,int i,int j); int main(){ srand(time(0)); int count; cout<<"请输入数组个数:"; cin>>count; int *a = new int[count]; cout<<"请输入数组:"; for(int i = 0;i<count;i++) cin>>a[i]; cout<<"请输入希望寻找第几大的数:"; int ch; cin>>ch; cout<<"it is :"<<select(a,0,count-1,ch); cout<<endl; return 0; } int select(int *a ,int l,int r,int i){ int re = partition(a,l,r); if(r == l) return a[r]; if(re -l+1 >= i){ select(a,l,re,i); }else{ select(a,re+1,r,i-(re-l+1)); } } void swap(int *a,int i,int j){ int temp = a[i]; a[i] = a[j]; a[j] = temp; } int partition(int *a,int l,int r){ if((l-r)==0) return l; int m = l+rand()%(r-l); swap(a,m,r); int left = l-1; int right = l-1; while(++right < r){ if(a[right] < a[r]){ swap(a,right,++left); } } swap(a,left+1,r); return left+1; }
|
近期评论