PHP快速排序quicksort實(shí)例詳解
本文實(shí)例講述了PHP快速排序quicksort。分享給大家供大家參考,具體如下:
quicksort
在快速排序算法中,使用了分治策略。首先把序列分成兩個(gè)子序列,遞歸地對(duì)子序列進(jìn)行排序,直到整個(gè)序列排序結(jié)束。(即一分為二的思想)
步驟如下:
在序列中選擇一個(gè)關(guān)鍵元素做為軸;
對(duì)序列進(jìn)行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動(dòng)到軸的后面。在進(jìn)行劃分之后,軸便在它最終的位置上;
遞歸地對(duì)兩個(gè)子序列進(jìn)行重新排序:含有較小元素的子序列和含有較大元素的子序列。
比如序列$arr:
5 3 0 11 44 7 23 2 將第一個(gè)元素$arr[0] = 5 作為軸 設(shè)置標(biāo)志位 low … top代表首尾
2 3 0 11 44 7 23 2 從相反方向(右)開(kāi)始比較:2<5 將第一個(gè)位置替換為2,low++
2 3 0 11 44 7 23 11 從相反方向(左)開(kāi)始比較直到:5<11 將最后一個(gè)位置替換為11,top–
重復(fù)以上步驟直到 low == top 把該位置替換為軸元素即5
2 3 0 5 44 7 23 11
這樣就可分為兩部分2 3 0 與 44 23 11
這樣就可以得出遞歸繼續(xù)開(kāi)始步驟
算法實(shí)現(xiàn):
class quick_sort{
function quicksort(&$arr,$low,$top){
if($low < $top){
$pivotpos = $this->partition($arr,$low,$top);
$this->quicksort($arr,$low,$pivotpos-1);
$this->quicksort($arr,$pivotpos+1,$top);
}
}
function partition(&$arr, $low ,$top){
if($low == $top){
return;
}
// 設(shè)置初始數(shù)值
$com = $arr[$low];
while($low!=$top){
// 將比初始數(shù)值小的替換到左邊
while($top&&$top!=$low){
if($com > $arr[$top]){
$arr[$low++] = $arr[$top];
break;
}else{
$top--;
}
}
// 將比初始數(shù)值大的替換到右邊
while($low&&$low!=$top){
if($com < $arr[$low]){
$arr[$top--] = $arr[$low];
break;
}else{
$low++;
}
}
}
$arr[$low] = $com;
return $low;
}
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php排序算法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php正則表達(dá)式用法總結(jié)》、及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
關(guān)于php開(kāi)啟錯(cuò)誤提示的總結(jié)
在本篇文章里小編給各位整理的是關(guān)于php開(kāi)啟錯(cuò)誤提示的相關(guān)知識(shí)點(diǎn)總結(jié),有需要的朋友們學(xué)習(xí)下。2019-09-09
php 刪除一個(gè)數(shù)組中的某個(gè)值.兼容多維數(shù)組!
php中刪除一個(gè)數(shù)組中的某個(gè)值.兼容多維數(shù)組,需要的朋友可以參考下2012-02-02
用js進(jìn)行url編碼后用php反解以及用php實(shí)現(xiàn)js的escape功能函數(shù)總結(jié)
這次第一次用smarttemplate這個(gè)模板,比smarty小巧了很多,但也有些不方便的地方。2010-02-02
php實(shí)現(xiàn)網(wǎng)頁(yè)端驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了php制作網(wǎng)頁(yè)端驗(yàn)證碼效果,運(yùn)用到短信驗(yàn)證碼以及網(wǎng)頁(yè)驗(yàn)證碼實(shí)踐中,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
探討PHP中this,self,parent的區(qū)別詳解
本篇文章是對(duì)PHP中this,self,parent的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬實(shí)例
這篇文章主要介紹了php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬,實(shí)例分析了事物控制的原理與事物回滾的使用技巧,需要的朋友可以參考下2015-01-01

