快速排序的疑问
钱能的<<C++教程>>中有一段快速排序的算法例子,但发现此程序有一定缺陷。
并不能完全排序,但偶找不到其中原因。猜想可能是如果中间值和高或者低值2者或者3者相同时出现的问题。哪位大虾帮忙抽空看看。
数组是一个2维n*3的,转换一维的,做比较的是第3个值,也是n*3+2
int tMiddle,l,r,temp,i;
l=tLeft;
r=tRight;
tMiddle=p[(tRight+tLeft)/2*3+2];
while(l<r)
{
while(p[l*3+2]<tMiddle)
++l;
while(p[r*3+2]>tMiddle)
--r;
if(l>=r)break;
i=p[l*3+2];
p[l*3+2]=p[r*3+2];
p[r*3+2]=i;
i=p[l*3+1];
p[l*3+1]=p[r*3+1];
p[r*3+1]=i;
i=p[l*3];
p[l*3]=p[r*3];
p[r*3]=i;
--r;
++l;
}
if(l==r)++l;
if(tLeft<r)
paixu1(p,tLeft,l-1);
if(tRight>l)
paixu1(p,r+1,tRight);*/