我正在学习排序算法,我正在尝试这个代码:
function quicksort($array){
if(count($array) == 0){
return array();
}
$pivot = $array[0];
$left = array();
$right = array();
for($i = 1; $i < count($array); $i++){
if($array[$i] < $pivot){
$left[] = $array[$i];
}
else{
$right[] = $array[$i];
}
return array_merge(quicksort($left), array($pivot), quicksort($right));
}
}
$sorted = quicksort($data);
然而,当试图运行它-它给我:
警告:array_merge():参数#3不是第21行的数组
有什么原因吗?
如果在循环内返回,则需要将该语句移出循环。
<?php
function quicksort($array){
if(count($array) == 0){
return array();
}
$pivot = $array[0];
$left = array();
$right = array();
for($i = 1; $i < count($array); $i++){
if($array[$i] < $pivot){
$left[] = $array[$i];
}
else{
$right[] = $array[$i];
}
// remove return that was here
}
// and move it outside the loop here
return array_merge(quicksort($left), array($pivot), quicksort($right));
}
$data = [3,4,2,1];
print_r(quicksort($data));
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )