快速排序和查找第K的数

来源:互联网 发布:mac 如何打开终端 编辑:程序博客网 时间:2024/05/17 04:46
int Partion(int data[],int start,int end) { int key=data[start]; int i=start,j=end; while(i<j) { while(i<j&&data[j]>=key) j--; if(i<j) data[i]=data[j]; while(i<j&&data[i]<=key) i++; if(i<j) data[j]=data[i]; } data[i]=key; return i; } void quicksort(int data[],int start,int end) {//快速排序 if(data==NULL||start>end) return ; int index=Partion(data,start,end); quicksort(data,start,index-1); quicksort(data,index+1,end); return ; }

 int findKth(int data[],int start,int end,int k) {//第k个数,使用快排的思想 if(data==NULL||start>end) return -1; int index=Partion(data,start,end); int num=index-start+1; if(num==k) return data[index]; else if(num>k) return findKth(data,start,index-1,k); else if(num<k) return findKth(data,index+1,end,k-num); }