我正在尝试从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 。