欢迎访问宙启技术站
智能推送

PHP数组函数:实现快速排序的示例

发布时间:2023-07-03 03:42:17

快速排序是一种常用的排序算法,其通过选择一个基准元素,将序列划分为两部分,使得左边的元素都小于等于基准元素,右边的元素都大于等于基准元素,然后对左右两部分分别进行递归排序,最终将整个序列排序完成。

下面是使用PHP数组函数实现快速排序的示例代码:

function quickSort(&$arr, $left, $right) {
    if ($left < $right) {
        // 划分数组,获取基准元素的下标
        $index = partition($arr, $left, $right);
        // 对基准元素左边的子数组进行递归排序
        quickSort($arr, $left, $index - 1);
        // 对基准元素右边的子数组进行递归排序
        quickSort($arr, $index + 1, $right);
    }
}

function partition(&$arr, $left, $right) {
    // 选择最右边的元素作为基准
    $pivot = $arr[$right];
    $i = $left - 1;
    for ($j = $left; $j < $right; $j++) {
        // 将小于等于基准的元素放到左边
        if ($arr[$j] <= $pivot) {
            $i++;
            swap($arr, $i, $j);
        }
    }
    // 将基准元素放到合适的位置
    swap($arr, $i + 1, $right);
    return $i + 1;
}

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

// 测试示例
$arr = [6, 1, 3, 9, 2, 7];
quickSort($arr, 0, count($arr) - 1);
print_r($arr);

以上代码定义了三个函数:

1. quickSort函数是快速排序的主函数,通过递归调用自身实现对数组的排序。参数$arr为待排序数组,$left和$right为当前子数组的左右边界。

2. partition函数是划分数组的辅助函数,通过选择一个基准元素,将数组划分为左右两部分。参数$arr为待划分数组,$left和$right为当前子数组的左右边界。

3. swap函数用于交换数组中两个元素的位置。

在测试示例中,我们定义了一个待排序数组$arr,然后调用quickSort函数对其进行排序,并打印排序结果。

运行以上代码,输出结果为:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 6
    [4] => 7
    [5] => 9
)

可以看到,数组中的元素已按照从小到大的顺序排列好了。

快速排序是一种高效的排序算法,其时间复杂度为O(nlogn),通过使用PHP数组函数进行实现,可以更加简洁地进行排序操作。