zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

log 时间 第一 确定 号码 阵列
2023-09-14 09:10:20 时间

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