PHP快速排序法不太懂,求指教。。。
答案:1 悬赏:30
解决时间 2021-04-10 09:59
- 提问者网友:霸气大叔
- 2021-04-10 00:26
<?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);
最佳答案
- 二级知识专家网友:情战凌云蔡小葵
- 2021-04-10 00:36
直接用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;
}
?>居然有朋友在评论里要求,就满足了这位朋友的需求。
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;
}
?>居然有朋友在评论里要求,就满足了这位朋友的需求。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯