PHP

php快速排序怎样实现

小樊
82
2024-12-02 12:13:44
栏目: 编程语言

快速排序是一种高效的排序算法,它的基本思想是使用分治法(Divide and Conquer)。在PHP中,你可以按照以下步骤实现快速排序:

  1. 选择一个基准值(pivot),通常选择数组的第一个元素或最后一个元素。
  2. 将数组中的元素分为两部分,一部分小于基准值,另一部分大于基准值。这个过程称为分区(partitioning)。
  3. 对这两部分递归地执行快速排序。
  4. 将排序后的两部分和基准值合并。

下面是一个简单的PHP实现:

function quick_sort(&$arr, $left, $right) {
    if ($left < $right) {
        $pivot_index = partition($arr, $left, $right);
        quick_sort($arr, $left, $pivot_index - 1);
        quick_sort($arr, $pivot_index + 1, $right);
    }
}

function partition(&$arr, $left, $right) {
    $pivot = $arr[$left]; // 选择基准值,这里选择第一个元素
    while ($left < $right) {
        while ($left < $right && $arr[$right] >= $pivot) {
            $right--;
        }
        $arr[$left] = $arr[$right];

        while ($left < $right && $arr[$left] <= $pivot) {
            $left++;
        }
        $arr[$right] = $arr[$left];
    }
    $arr[$left] = $pivot;
    return $left;
}

// 测试数组
$arr = [3, 6, 8, 10, 1, 2, 1];
quick_sort($arr, 0, count($arr) - 1);
print_r($arr);

这个实现会对传入的数组进行原地排序,也就是说它会直接修改传入的数组。如果你不希望修改原数组,可以在调用quick_sort函数之前创建一个数组的副本。

0
看了该问题的人还看了