Hoare分区方案返回错误的索引

时间:2018-07-17 08:27:26

标签: php algorithm quicksort

我正在尝试从a qsort algorithm中为可以包含重复项的数组实现Hoare分区方案,但是每次我修改代码以通过测试用例时,它都会破坏另一个。无法弄清楚我的错误。

function partition(array &$original, int $lo, int $hi): int
{
    if ($lo === $hi) {
        return $hi;
    }

    $pivot = $original[$lo];

    $i = $lo - 1;
    $j = $hi + 1;
    while (true) {
        do {
            $i++;
        } while ($original[$i] < $pivot);

        do {
            $j--;
        } while ($j > $lo && $original[$j] >= $pivot);

        if ($i >= $j) {
            return $j;
        }

        [$original[$i], $original[$j]] = [$original[$j], $original[$i]];
    }
}

Here my testcases,我已经尝试将 do ... while 循环替换为 while(i 循环,并在断点处插入倒置条件里面的声明,例如

while ($i < $j) {
    $i++;

    if ($original[$i] >= $pivot) {
        break;
    }
}

while ($i < $j) {
    $j--;

    if ($original[$j] < $pivot) {
        break;
    }
}

但是它用 [4、1、7、4、2、5] 项返回错误的枢轴索引破坏了测试用例#4

0 个答案:

没有答案