php - Hoare 分区方案返回错误的索引
问题描述
我正在尝试从可以包含重复项的数组的 qsort 算法中实现 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]];
}
}
在我的测试用例中,我已经尝试用while (i < j)循环替换do...while循环, 并在其中放置带有 break 语句的反转条件,例如
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 。
解决方案
推荐阅读
- javascript - 如何以及何时使用“ng build”生成的 lib 文件夹的 esm5 和 esm2015 目录?
- angular - 如何强制 CSS 文件成为角度项目中呈现的最后一个文件?
- c++ - 到达顶部后将正方形放在左侧
- bash - Glob似乎在makefile中坏了
- php - $this->query() 中条件为空的 Codeigniter
- c# - 为什么剂量 Request.Form["key"] 不起作用?
- javascript - 当浏览器重新加载页面时,如何将 POST 请求从 chrome 扩展(不点击)发送到 Flask?
- kubernetes - 使用 yaml 文件部署 golang 项目
- javascript - 尝试在 Android Webview 中使用 javascript 与网站“同步”交互
- php - Octobercms - 如何根据后端表单中的输入获取数据并更新其余输入字段