遞迴調用 - 關於php的快速排序,如何遞迴?

來源:互聯網
上載者:User
關鍵字 php 遞迴調用
我想實現php下的遞迴,下面這段代碼只能實現第一次排序,
但是不知道如何?遞迴,瞭解了通過把兩個左右數組merge一下,還是傻傻搞不明白。
請教各位,幫忙把代碼最佳化下,或者貼下結果。謝謝~

 $tmpb){            echo $arr[$j],"比",$tmpb,"大 go on ","\n";            --$j;            echo '$j',"減1,下標為",$j,"值為--";echo $arr[$j]."\n";            echo '現在數組為',"\n";            var_dump($arr);        }        // 如果這個值比pivot小了,那麼就交換,然後從開始到左邊找        if($arr[$j]<$tmpb){            echo $arr[$j],"比",$tmpb,"小了~ ";            echo '交換',"\n";            swap($arr[$j],$arr[$i]);            ++$i;            echo '現在數組為',"\n";            var_dump($arr);            echo '$i',"加1,下標為",$i,"值為--";echo $arr[$i]."\n";            echo "在從左邊開始";            echo "\n";        }        // 然後從左邊開始找        while($arr[$i]<$tmpb){            echo $arr[$i],'比',$tmpb,'小 go on ',"\n",'';            ++$i;            echo '$i',"加1,下標為",$i,"值為---";echo $arr[$i]."\n";        }        if($arr[$i]>$tmpb){            echo $arr[$i],'比',$tmpb,'大了,交換';            swap($arr[$i],$arr[$j]);            --$j;            echo '$j',"減1,下標為",$j,"值為--";echo $arr[$j]."\n";            echo '現在數組為',"\n";            var_dump($arr);            echo "在從右邊邊開始";            echo '再走一層最外層while',"\n";            }}    return $arr;}$result=quicksort($arr);echo "========================","最終結果為\n";var_dump($result);

執行的結果我貼一下:
========================最終結果為
array (
0 => 23,
1 => 13,
2 => 51,
3 => 57,
4 => 26,
5 => 66,
6 => 81,
7 => 69,
8 => 76,
)他只是按找66分成了左右兩部分,結合我上面的思路,怎麼能遞迴呢?

回複內容:

我想實現php下的遞迴,下面這段代碼只能實現第一次排序,
但是不知道如何?遞迴,瞭解了通過把兩個左右數組merge一下,還是傻傻搞不明白。
請教各位,幫忙把代碼最佳化下,或者貼下結果。謝謝~

 $tmpb){            echo $arr[$j],"比",$tmpb,"大 go on ","\n";            --$j;            echo '$j',"減1,下標為",$j,"值為--";echo $arr[$j]."\n";            echo '現在數組為',"\n";            var_dump($arr);        }        // 如果這個值比pivot小了,那麼就交換,然後從開始到左邊找        if($arr[$j]<$tmpb){            echo $arr[$j],"比",$tmpb,"小了~ ";            echo '交換',"\n";            swap($arr[$j],$arr[$i]);            ++$i;            echo '現在數組為',"\n";            var_dump($arr);            echo '$i',"加1,下標為",$i,"值為--";echo $arr[$i]."\n";            echo "在從左邊開始";            echo "\n";        }        // 然後從左邊開始找        while($arr[$i]<$tmpb){            echo $arr[$i],'比',$tmpb,'小 go on ',"\n",'';            ++$i;            echo '$i',"加1,下標為",$i,"值為---";echo $arr[$i]."\n";        }        if($arr[$i]>$tmpb){            echo $arr[$i],'比',$tmpb,'大了,交換';            swap($arr[$i],$arr[$j]);            --$j;            echo '$j',"減1,下標為",$j,"值為--";echo $arr[$j]."\n";            echo '現在數組為',"\n";            var_dump($arr);            echo "在從右邊邊開始";            echo '再走一層最外層while',"\n";            }}    return $arr;}$result=quicksort($arr);echo "========================","最終結果為\n";var_dump($result);

執行的結果我貼一下:
========================最終結果為
array (
0 => 23,
1 => 13,
2 => 51,
3 => 57,
4 => 26,
5 => 66,
6 => 81,
7 => 69,
8 => 76,
)他只是按找66分成了左右兩部分,結合我上面的思路,怎麼能遞迴呢?

`

public static function quickSort( $numArr ){    $minArr = [];    $maxArr = [];    $randKey = array_rand( $numArr );    $baseNum = $numArr[$randKey];    unset( $numArr[$randKey] );    foreach ( $numArr as $num )    {        if ( $num >= $baseNum )            $maxArr[] = $num;        else            $minArr[] = $num;    }    if ( count( $maxArr ) > 1 )        $maxArr = self::quickSort( $maxArr );    if ( count( $minArr ) > 1 )        $minArr = self::quickSort( $minArr );    return array_merge( $minArr, [$baseNum], $maxArr );}`

我是這麼做的

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.