PHP快速排序法不太懂,求指教。。。

<?php

$arr=array(6,0,4,1,-1,9,6,7);

function quickSort($str) {

if(count($str)<=1) return $str;//如果个数不大于一,直接返回
$key=$str[0];//取一个值,稍后用来比较;

$left_arr=array();
$right_arr=array();

for($i=1;$i<count($str);$i++){//比$key大的放在右边,小的放在左边;
if($str[$i]<=$key)
$left_arr[]=$str[$i];
else
$right_arr[]=$str[$i];
}
$left_arr=quicksort($left_arr);//进行递归;
$right_arr=quicksort($right_arr);
return array_merge($left_arr,array($key),$right_arr);//将左中右的值合并成一个数组



}

print_r(quickSort($arr));

?>
下面这一段递归不怎么懂,是怎么把他们分开后又进行组合的,简单通俗点
$left_arr=quicksort($left_arr);//进行递归;
$right_arr=quicksort($right_arr);

直接用sort函数排序不就完了,写这么多代码作什么呢?

sort($arr);

再输出结果看看,已经就排好了。

<?php
$arr=array(5,7,2,10,8,1);
sort($arr);
var_dump($arr);
//结果 便已经按1 2 5 7 8 10 这样排序了。
//如果非要学习递归的排序,见下面代码

function sorttest($ar){
$tmparr=array();
if(count($ar)<=1) return $ar;
$tmp=array_rand($ar);
foreach($ar as $v){
if($v>$ar[$tmp]){
$right[]=$v;
}else{
$left[]=$v;
}
}
if(!empty($left)){
         if(count($left)<=1){
          $tmparr[]=$left[0];
         }else{
          $tmparr=array_merge($tmparr,sorttest($left)); 
         }
}
if(!empty($right)){
    if(count($right)<=1){
     $tmparr[]=$right[0];
    }else{
       $tmparr=array_merge($tmparr,sorttest($right));
        }
}
return $tmparr;
}

?>

居然有朋友在评论里要求,就满足了这位朋友的需求。

温馨提示:答案为网友推荐,仅供参考