<code>function qsort($arr){ if(!isset($arr[1])){ return $arr; } for ($i=0; $i =$arr[0]){ $rarr[] = $arr[$i+1]; } } $larr = qsort($larr); $larr[] = $arr[0]; $rarr = qsort($rarr); return array_merge($larr,$rarr); } print_r(qsort(array(411,21,333,666)));</code>
输出Array ( [0] => [1] => [2] => 21 [3] => 333 [4] => 411 [5] => 666 )
为什么前面多了2个空值?
<code>function qsort($arr){ if(!isset($arr[1])){ return $arr; } for ($i=0; $i =$arr[0]){ $rarr[] = $arr[$i+1]; } } $larr = qsort($larr); $larr[] = $arr[0]; $rarr = qsort($rarr); return array_merge($larr,$rarr); } print_r(qsort(array(411,21,333,666)));</code>
输出Array ( [0] => [1] => [2] => 21 [3] => 333 [4] => 411 [5] => 666 )
为什么前面多了2个空值?
for循环的结束条件是$i 然后你一定是关了报错,所以PHP没有报错,而是认为结果是空值继续执行下去了,所以排序的结果中混入了空值 正确: https://3v4l.org/CIKED
应该是array_merge的原因
为啥要这样写排序呢? 内置的数组排序函数可以用啊!<code class="php"><?php function qsort($arr){
if(!isset($arr[1])){
return $arr;
}
$larr = $rarr = array(); //初始化变量,确保它一定存在
for ($i=1; $i < count($arr); $i++) { //不用$i+1,而是修改初始值为1
if($arr[$i]<$arr[0]){
$larr[] = $arr[$i];
}
if($arr[$i]>=$arr[0]){
$rarr[] = $arr[$i];
}
}
$larr = qsort($larr);
$larr[] = $arr[0];
$rarr = qsort($rarr);
return array_merge($larr,$rarr);
}
print_r(qsort(array(411,21,333,666)));</code>
<code> function querySort($arr,$order='asc') {
if (count($arr) $value) {
if ($order=='desc') {
if ($value $val) {
$arr_left[] = $value;
} else {
$arr_right[] = $value;
}
}
}
$arr_left = querySort($arr_left,$order);
$arr_right = querySort($arr_right,$order);
return array_merge($arr_left,[$val],$arr_right);
}
$arr = querySort(array(411,21,333,666));
echo "<pre class="brush:php;toolbar:false">";
var_dump($arr);