- 13
- 0
- 约小于1千字
- 约 10页
- 2024-06-04 发布于四川
- 举报
;3.3求解查找问题——查找第k小元素;3.3.3寻找一个序列中第k小元素;5146;3.3.3寻找一个序列中第k小元素;对于序列a[s..t],在其中查找第k小元素的过程如下:
将a[s]作为基准划分,其对应下标为i。3种情况:;intQuickSelect(inta[],ints,intt,intk)//在a[s..t]序列中找第k小的元素
{inti=s,j=t,tmp;
if(st)
{tmp=a[s];
while(i!=j) //从区间两端交替向中间扫描,直至i=j为止
{while(jia[j]=tmp)j--;//从右向中间扫描,直至a[j]tmp为止
a[i]=a[j]; //将a[j]前移到a[i]的位置
while(ija[i]=tmp)i++;//从左向中间扫描,直至a[i]tmp为止
a[j]=a[i]; //将a[i]后移到a[j]的位置
}
a[i]=tmp;
if(k-1==i)returna[i];
elseif(k-1i)returnQuickSelect(a,s,i-1,k);//在左区间中递归查找
elseretur
原创力文档

文档评论(0)