php - 快速排序的枢轴选取

// 给定一个数组
$arr = [5, 1, 9, 3, 7, 4, 8, 6, 2];
// 指定某个下标的值作为中间数
$pivot = $arr[0];
// 重新排列数组, 使得 左边的元素 <= $pivot <= 右边的元素
// 类似 [ 左边元素,  $pivot,  右边元素]
// 提示: $pivot 的位置不一定就是正中间

partition($arr, 0);
dd($arr);

function swap(array &$arr, int $i, int $j)
{
    $temp = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $temp;
}

function partition(array &$arr, int $index)
{
    $len = count($arr);
    $low = 0;
    $high = $len - 1;
    if ($index != $low)
    {
        swap($arr, $low, $index);
    }

    $pivot = $arr[$low];
    while ($low < $high)
    {
        while ($low < $high && $arr[$high] >= $pivot)
            $high--;
        swap($arr, $low, $high);

        while ($low < $high && $arr[$low] <= $pivot)
            $low++;
        swap($arr, $low, $high);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容