快速排序的实施

时间:2012-10-09 17:58:08

标签: algorithm quicksort

以下快速排序代码来自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)没有任何内容 做分区。

由于

1 个答案:

答案 0 :(得分:2)

我会说,是的,你可以做出改变:

当i == j时,

swap(i,j)是无效的,并且在i == j之后的下一次迭代无条件地递增i并递减j并因此将导致循环终止而无需改变数组。