这样运行是正确的
但是这样就错了
为什么?为什么不能直接从基准数后一个进行判断?请指教,谢谢!
会漏掉数据或者逻辑错误,我给你写了个例子,运行过程中,如果i=left+1 会导致死循环,如下:
假设数组a中有3个数据,a[1]=33 a[2]=22 a[3]=44
调用quicksort(1,3),假如是i = left+1,执行过程如下:
left = 1,right=3
temp = a[left]=a[1]=33
i=left+1 = 2;
j=right=3;
执行while(i!=j)
------------------------------------
while循环
a[j] = a[3]=44 temp = 33 i=2,j=3 a[j]>=temp && i<j 成立 j--
a[j] = a[2]=22 temp = 33 i=2,j=2 a[j]>=temp && i<j 不成立,while循环结束
while循环
a[i]=a[2]=22 temp=33 i=2,j=2 a[i]<=temp && i<j 不成立,while循环结束
i=2,j=2 if(i<j)不成立
i=2,j=2, i==j,while(i!=j)结束
a[left]=a[i] 即 a[1]=a[2]= 22
a[i]=temp 即 a[2]=33
quicksort(1,1),执行过程如下:
---------------------------------------
left = 1 right=1
temp = a[1] = 22
i=left+1=2
j=right=1
执行while(i!=j)
--------------------------------
while循环
a[j]=a[1]=22 temp=22 i=2,j=1 i<j不成立,while结束
while循环
a[i]=a[2]=33 temp=22 i=2,j=1 i<j不成立,while结束
if(i<j)不成立
i和j都不改变,i!=j 永远成立,while(i!=j)变成死循环了!!!!!