2016-11-13 56 views
0

數組我正在學習有關的排序算法,我想這樣的代碼:PHP:快速排序的代碼口口聲聲說:警告:array_merge():參數#3不

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行

的任何原因?

+0

您對SO張貼問題之前做更多的研究。我在PHP中對排序算法進行了搜索,並且基本上發佈了[此片段](http://andrewbaxter.net/quicksort.php)! – yardpenalty

+0

你在第三個參數後缺少'''! – yardpenalty

+0

@yardpenalty不是真的那個,而是來自其他網站。 我正在經歷幾種不同的排序方法,並嘗試記住代碼,然後從我記憶中重寫它。 – AleRemote225

回答

0

你正在循環內部返回,你需要將該語句移到循環之外。

<?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 
) 
+0

他也錯過了一個括號。他基本上從[這裏](http://andrewbaxter.net/quicksort.php)抓取了這段代碼片段,並且毫不費力地解決了這個問題。 – yardpenalty

相關問題