简介参考算法9.2
int partition(int *a,int p,int r){ int x=a[r]; int i=p-1; for(int j=p;j<=r-1;j++){ if(a[j]<=x){ i++; int tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } int tmp=a[i+1]; a[i+1]=a[r]; a[r]=tmp; return i+1; } R_Select(int *a,int p,int r,int i){ if(p==r) return a[p]; int q=partition(a,p,r); int k=q-p; if(i==k) return a[q]; else if(i<k) return R_Select(a,p,q-1,i); else return R_Select(a,q+1,r,i-k); }