亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
遞歸調(diào)用 - 關(guān)于php的快速排序,如何遞歸?
PHPz
PHPz 2017-04-10 17:12:48
[PHP討論組]

我想實(shí)現(xiàn)php下的遞歸,下面這段代碼只能實(shí)現(xiàn)第一次排序,
但是不知道如何實(shí)現(xiàn)遞歸,了解了通過把兩個(gè)左右數(shù)組merge一下,還是傻傻搞不明白。
請教各位,幫忙把代碼優(yōu)化下,或者貼下結(jié)果。謝謝~

 <?php

 $arr=[66,13,51,76,81,26,57,69,23];

 function swap(&$a,&$b){
    $tmp=$a;
    $a=$b;
    $b=$tmp;
    unset($tmp);
    return true;
 }
function quicksort($arr){
    
    $i=0;
    $j=count($arr)-1;
    $tmpb=$arr[0];// 基準(zhǔn)元素 pivot

    while($arr[$i]!==$arr[$j]){
        //先從最右邊找
        while ($arr[$j]>$tmpb){
            echo $arr[$j],"比",$tmpb,"大 go on ","\n";
            --$j;
            echo '$j',"減1,下標(biāo)為",$j,"值為--";echo $arr[$j]."\n";
            echo '現(xiàn)在數(shù)組為',"\n";
            var_dump($arr);
        }
        // 如果這個(gè)值比pivot小了,那么就交換,然后從開始到左邊找
        if($arr[$j]<$tmpb){
            echo $arr[$j],"比",$tmpb,"小了~ ";
            echo '交換',"\n";
            swap($arr[$j],$arr[$i]);
            ++$i;
            echo '現(xiàn)在數(shù)組為',"\n";
            var_dump($arr);
            echo '$i',"加1,下標(biāo)為",$i,"值為--";echo $arr[$i]."\n";
            echo "在從左邊開始";
            echo "\n";
        }
        // 然后從左邊開始找
        while($arr[$i]<$tmpb){
            echo $arr[$i],'比',$tmpb,'小 go on ',"\n",'';
            ++$i;
            echo '$i',"加1,下標(biāo)為",$i,"值為---";echo $arr[$i]."\n";
        }

        if($arr[$i]>$tmpb){
            echo $arr[$i],'比',$tmpb,'大了,交換';
            swap($arr[$i],$arr[$j]);
            --$j;
            echo '$j',"減1,下標(biāo)為",$j,"值為--";echo $arr[$j]."\n";
            echo '現(xiàn)在數(shù)組為',"\n";
            var_dump($arr);
            echo "在從右邊邊開始";
            echo '再走一層最外層while',"\n";
            }
}

    return $arr;
}
$result=quicksort($arr);
echo "========================","最終結(jié)果為\n";
var_dump($result);

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

PHPz
PHPz

學(xué)習(xí)是最好的投資!

全部回復(fù)(1)
PHP中文網(wǎng)

`

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 );
}`

我是這么做的

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號