select函数如下:for循环中,为什么是i<(r-p-4)/5,而不是i<(r-p)/5 ????
求教各位一下。
int select(int p,int r,int k) //寻找中位数
{
if(r-p<5){
bubble(p,r);
return a[p+k-1];
}
for(int i=0;i<(r-p-4)/5;i++)
{
int s=p+5*i,t=s+4;
bubble(s,t);
int temp=a[p+i];
a[p+i]=a[s+2];
a[s+2]=temp;
}
int x=select(p,p+(r-p-4)/5,(r-p+6)/10);
i=partition(p,r,x);
int j=i-p+1;
if(k<=j)
return select(p,i,k);
else
return select(i+1,r,k-j);
}
减去4是为了防止重复操作吧……
能说得详细点吗?为什么有重复操作?