您现在的位置是:网站首页>>PHP>>php
PHP实现快速排序
发布时间:2019-02-25 11:23:44作者:wangjian浏览量:572点赞量:0
这里总结一下快速排序的实现
算法原理:
从数列中挑出一个元素,称为 “基准”(pivot);
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
上面是官方的快速排序算法解释,说明有点官方,下面总结了一下通俗易懂的解释:
通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,继续递归用相同的方式来排序左边和右边,最后合并数组
图形说明:
快速排序实现代码:$arr = [5,7,4,6,3,8,2,0,9,1];
$sort = quick_sort($arr);
echo '
';
print_r($sort);
function quick_sort($arr)
{
//判断传入的数组是否只有一个,只有一个不需要进行排序,直接返回
if (count($arr) <= 1) {
return $arr;
}
$middle = $arr[0]; // 设置中间值
$left = array(); // 接收小于中间值
$right = array();// 接收大于中间值
// 循环比较
for ($i=1; $i < count($arr); $i++) {
if ($middle < $arr[$i]) {
// 大于中间值
$right[] = $arr[$i];
} else {
// 小于中间值
$left[] = $arr[$i];
}
}
// 递归排序划分好的2边
$left = quick_sort($left);
$right = quick_sort($right);
// 合并排序后的数据
return array_merge($left, array($middle), $right);
}
输出结果为:
参考:https://mp.weixin.qq.com/s/vn3KiV-ez79FmbZ36SX9lg
0
+1