以下快速排序代码来自programming pearls
void qsort3(int l, int u)
{ int i, j;
DType t;
if (l >= u)
return;
t = x[l];
i = l;
j = u+1;
for (;;) {
do i++; while (i <= u && x[i] < t);
do j--; while (x[j] > t);
if (i > j)
break;
swap(i, j);
}
swap(l, j);
qsort3(l, j-1);
qsort3(j+1, u);
}
在双向分区部分,有一行:
if (i > j)
我的问题是否可以将此行更改为:
if(i >= j)
我认为这样做的原因是:
(i==j)
&lt; =&gt; (x[i] == t)
这样我们就不需要了
交换x [i]和x [j]。我们只是打破for
循环。
for
循环的以下代码为swap(l, j)
。
由于x [j] == t == x [l],swap(l, j)
没有任何内容
做分区。
由于
答案 0 :(得分:2)
我会说,是的,你可以做出改变:
当i == j时,swap(i,j)是无效的,并且在i == j之后的下一次迭代无条件地递增i并递减j并因此将导致循环终止而无需改变数组。