溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在PHP中使用遞歸實(shí)現(xiàn)一個(gè)快速排序算法

發(fā)布時(shí)間:2021-01-26 16:37:30 來(lái)源:億速云 閱讀:117 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

怎么在PHP中使用遞歸實(shí)現(xiàn)一個(gè)快速排序算法?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

使用遞歸,則需要找到遞歸點(diǎn)和遞歸出口:

遞歸點(diǎn):如果數(shù)組的元素大于1,就需要再進(jìn)行分解,所以我們的遞歸點(diǎn)就是新構(gòu)造的數(shù)組元素個(gè)數(shù)大于1

遞歸出口:我們什么時(shí)候不需要再對(duì)新數(shù)組不進(jìn)行排序了呢?就是當(dāng)數(shù)組元素個(gè)數(shù)變成1的時(shí)候,所以這就是我們的出口。

理解了原理,來(lái)看一下代碼實(shí)現(xiàn)~

<?php
//快速排序
//待排序數(shù)組
$arr=array(6,3,8,6,4,2,9,5,1);
//函數(shù)實(shí)現(xiàn)快速排序
function quick_sort($arr)
{
    //判斷參數(shù)是否是一個(gè)數(shù)組
    if(!is_array($arr)) return false;
    //遞歸出口:數(shù)組長(zhǎng)度為1,直接返回?cái)?shù)組
    $length=count($arr);
    if($length<=1) return $arr;
    //數(shù)組元素有多個(gè),則定義兩個(gè)空數(shù)組
    $left=$right=array();
    //使用for循環(huán)進(jìn)行遍歷,把第一個(gè)元素當(dāng)做比較的對(duì)象
    for($i=1;$i<$length;$i++)
    {
      //判斷當(dāng)前元素的大小
      if($arr[$i]<$arr[0]){
        $left[]=$arr[$i];
      }else{
        $right[]=$arr[$i];
      }
    }
    //遞歸調(diào)用
    $left=quick_sort($left);
    $right=quick_sort($right);
    //將所有的結(jié)果合并
    return array_merge($left,array($arr[0]),$right);
}
//調(diào)用
echo "<pre>";
print_r(quick_sort($arr));

運(yùn)行結(jié)果:

Array
(
  [0] => 1
  [1] => 2
  [2] => 3
  [3] => 4
  [4] => 5
  [5] => 6
  [6] => 6
  [7] => 8
  [8] => 9
)

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI