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

PHP数组:利用函数实现快速排序

发布时间:2023-06-29 14:56:55

快速排序是一种常用的排序算法,它的基本思想是通过不断分割数组,并使得分割后的子数组满足左边的元素都小于右边的元素,然后通过递归地对子数组进行排序,最终完成整个数组的排序。

下面是利用函数实现快速排序的PHP代码:

function quickSort(&$arr, $left, $right) {
    if($left < $right) {
        $pivot = partition($arr, $left, $right); // 获取基准值的索引
        quickSort($arr, $left, $pivot-1); // 对基准值左边的子数组进行排序
        quickSort($arr, $pivot+1, $right); // 对基准值右边的子数组进行排序
    }
}

function partition(&$arr, $left, $right) {
    $pivot = $arr[$right]; // 取最右边的元素作为基准值
    $i = $left - 1; // 定义一个指针,初始值为 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 = [5, 2, 1, 9, 7, 6];
$len = count($arr);
quickSort($arr, 0, $len-1);

print_r($arr);

以上代码中,quickSort 函数是递归地对子数组进行排序的函数,它接受三个参数:数组,子数组的左边界和右边界。 partition 函数则是实现分割数组的函数,它需要一个基准值来进行比较,采用的策略是选择最右边的元素作为基准值。swap 函数是用来交换数组中两个位置的元素。

在测试代码中,我们给出了一个示例数组 [5, 2, 1, 9, 7, 6],然后调用 quickSort 函数进行排序,并打印排序后的结果。

快速排序的时间复杂度为 O(nlogn),其中 n 是数组的长度。它是一种高效的排序算法,常用于处理大规模数据。