您好,登錄后才能下訂單哦!
怎么在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ì)億速云的支持。
免責(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)容。