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 是数组的长度。它是一种高效的排序算法,常用于处理大规模数据。
