關於php快速排序代碼執行過程的問題

來源:互聯網
上載者:User

問題是這樣的:
為什麼這裡列印$left會有array empty、array 0 => int 6這兩個數組出現啊?按理說遞迴調用到array 0 => int 1這個數組之後就直接執行71行的return $arr了啊,怎麼還會有之後的兩個數組呢?

原始碼如下:

$arr = array(6,3,8,6,4,2,9,5,1);function quick_sort($arr){    if(!is_array($arr)) return false;        $length = count($arr);    if($length <= 1) return $arr;    $left = $right = array();    for($i = 1;$i < $length;$i++){                                                        if($arr[$i] < $arr[0]){            $left[] = $arr[$i];                                     }else{            $right[] = $arr[$i];                                               }    }    var_dump($left);    $left = quick_sort($left);    $right = quick_sort($right);    return array_merge($left,array($arr[0]),$right);}print_r(quick_sort($arr));

回複內容:

問題是這樣的:
為什麼這裡列印$left會有array empty、array 0 => int 6這兩個數組出現啊?按理說遞迴調用到array 0 => int 1這個數組之後就直接執行71行的return $arr了啊,怎麼還會有之後的兩個數組呢?

原始碼如下:

$arr = array(6,3,8,6,4,2,9,5,1);function quick_sort($arr){    if(!is_array($arr)) return false;        $length = count($arr);    if($length <= 1) return $arr;    $left = $right = array();    for($i = 1;$i < $length;$i++){                                                        if($arr[$i] < $arr[0]){            $left[] = $arr[$i];                                     }else{            $right[] = $arr[$i];                                               }    }    var_dump($left);    $left = quick_sort($left);    $right = quick_sort($right);    return array_merge($left,array($arr[0]),$right);}print_r(quick_sort($arr));

你dump的是left,假如數組是[1,3,3]就是空啊,[2,3,1]就是一個啊

$arr = array(6,3,8,6,4,2,9,5,1);
$result = array();
function aaa($arr,$result){

$min = min($arr);array_push($result, $min);$key=array_search($min ,$arr);array_splice($arr,$key,1);if(count($arr)){    aaa($arr,$result);}else{    echo json_encode($result);    exit;}

}
aaa($arr,$result);

用這個思路感覺更簡單

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.