function qsort($arr){ if(!isset($arr[1])){ return $arr; } for ($i=0; $i < count($arr); $i++) { if($arr[$i+1]<$arr[0]){ $larr[] = $arr[$i+1]; } if($arr[$i+1]>=$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)));
輸出Array ( [0] => [1] => [2] => 21 [3] => 333 [4] => 411 [5] => 666 )
為什麼前面多了2個空值?
回複內容:
function qsort($arr){ if(!isset($arr[1])){ return $arr; } for ($i=0; $i < count($arr); $i++) { if($arr[$i+1]<$arr[0]){ $larr[] = $arr[$i+1]; } if($arr[$i+1]>=$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)));
輸出Array ( [0] => [1] => [2] => 21 [3] => 333 [4] => 411 [5] => 666 )
為什麼前面多了2個空值?
for迴圈的結束條件是$i
然後你一定是關了報錯,所以PHP沒有報錯,而是認為結果是空值繼續執行下去了,所以排序的結果中混入了空值
正確:
=$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)));
https://3v4l.org/CIKED
function querySort($arr,$order='asc') { if (count($arr)<1) { return $arr; } $arr_left = $arr_right = array(); $val = $arr[0]; unset($arr[0]); foreach ($arr as $key => $value) { if ($order=='desc') { if ($value < $val) { $arr_left[] = $value; } else { $arr_right[] = $value; } } else { 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 "
"; var_dump($arr);
應該是array_merge的原因
為啥要這樣寫排序呢? 內建的數組排序函數可以用啊!