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数组函数进行实现,可以更加简洁地进行排序操作。
