参考算法导论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);
}
本文详细阐述了快速选择算法的实现过程,包括partition函数和递归选择子数组中的第k小元素。通过实例分析,深入理解算法的核心逻辑和优化策略。
781

被折叠的 条评论
为什么被折叠?



