思路
通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,
继续递归用相同的方式来排序左边和右边,最后合并数组
代码
<?php
$a = array(2, 13, 42, 34, 56, 23, 67, 365, 87665, 54, 68, 3);
function quicksort($a)
{
if (count($a) <= 1) {
return $a;
}
$mid = $a[0];
$left = array();
$right= array();
foreach ($a as $k=>$v){
if($k>0){
if($mid < $v){
$right[]=$a[$k];;
}else{
$left[]=$a[$k];;
}
}
}
// for ($i=1; $i < count($a); $i++) {
// if ($mid < $a[$i]) {
// // 大于中间值
// $right[] = $a[$i];
// } else {
// // 小于中间值
// $left[] = $a[$i];
// }
// }
//
$left = quicksort($left);
$right = quicksort($right);
$res = array_merge($left,array($mid),$right);
return $res;
}
print_r(quicksort($a));
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询