log(n)在第一时间,以确定该阵列i小号码

时间:2024-01-11 21:10:32

简介参考算法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);
}