快速排序代码一直说:警告:array_merge():参数#3不是一个数组


PHP: Quick sort code keeps saying: Warning: array_merge(): Argument #3 is not an array in

我正在学习排序算法,我正在尝试这个代码:

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
)