php快速排序原理與實(shí)現(xiàn)方法分析
本文實(shí)例講述了php快速排序方法。分享給大家供大家參考,具體如下:
<?php
$n = array('13','14','55','10','54','2','79','106','89','90','22','60','111','77777','-110','-10','123');
function partition($n,$left,$right)
{
global $n;
$pivot = $n[$left];
$lo=$left;
$hi=$right+1;
while($lo+1!=$hi) {
if($n[$lo+1]<$pivot)
$lo++;
else if($n[$hi-1]>$pivot)
$hi--;
else{
$t=$n[$lo+1];
$n[$lo+1]=$n[$hi-1];
$n[$hi-1]=$t;
$lo++;
$hi--;
}
}
$n[$left]=$n[$lo];
$n[$lo]=$pivot;
return $lo;
}
function quicksort($n,$left,$right)
{
global $n;
$dp = 0;
if ($left<$right) {
$dp=partition($n,$left,$right);
quicksort($n,$left,$dp-1);
quicksort($n,$dp+1,$right);
}
}
quicksort($n,0,sizeof($n)-1);
print_r($n);
?>
快速排序是對(duì)冒泡排序的一種改進(jìn)。它的基本思想是:通過(guò)一躺排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一不部分的所有數(shù)據(jù)都要小,然后再按次方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
假設(shè)要排序的數(shù)組是A[1]……A[N],首先任意選取一個(gè)數(shù)據(jù)(通常選用第一個(gè)數(shù)據(jù))作為關(guān)鍵數(shù)據(jù),然后將所有比它小的數(shù)都放到它前面,所有比它大的數(shù)都放到它后面,這個(gè)過(guò)程稱為一躺快速排序。一躺快速排序的算法是:
1)、設(shè)置兩個(gè)變量I、J,排序開(kāi)始的時(shí)候I:=1,J:=N;
2)、以第一個(gè)數(shù)組元素作為關(guān)鍵數(shù)據(jù),賦值給X,即X:=A[1];
3)、從J開(kāi)始向前搜索,即由后開(kāi)始向前搜索(J:=J-1),找到第一個(gè)小于X的值,兩者交換;
4)、從I開(kāi)始向后搜索,即由前開(kāi)始向后搜索(I:=I+1),找到第一個(gè)大于X的值,兩者交換;
5)、重復(fù)第3、4步,直到I=J;
快速排序就是遞歸調(diào)用此過(guò)程——在以49為中點(diǎn)分割這個(gè)數(shù)據(jù)序列,分別對(duì)前面一部分和后面一部分進(jìn)行類似的快速排序,從而完成全部數(shù)據(jù)序列的快速排序,最后把此數(shù)據(jù)序列變成一個(gè)有序的序列
補(bǔ)充:小編在這里推薦一款本站的php格式化美化的排版工具幫助大家在以后的PHP程序設(shè)計(jì)中進(jìn)行代碼排版:
php代碼在線格式化美化工具:
http://tools.jb51.net/code/phpformat
另外,由于php屬于C語(yǔ)言風(fēng)格,因此下面這款工具同樣可以實(shí)現(xiàn)php代碼的格式化:
C語(yǔ)言風(fēng)格/HTML/CSS/json代碼格式化美化工具:
http://tools.jb51.net/code/ccode_html_css_json
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP實(shí)現(xiàn)的解漢諾塔問(wèn)題算法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的解漢諾塔問(wèn)題算法,簡(jiǎn)單描述了漢諾塔問(wèn)題及相應(yīng)的實(shí)現(xiàn)算法,并結(jié)合實(shí)例形式給出了PHP具體操作技巧,需要的朋友可以參考下2018-08-08
laravel 解決后端無(wú)法獲取到前端Post過(guò)來(lái)的值問(wèn)題
今天小編就為大家分享一篇laravel 解決后端無(wú)法獲取到前端Post過(guò)來(lái)的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
Uncaught exception com_exception with message Failed to crea
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `InternetExplorer.Application': 拒絕訪問(wèn)2012-01-01
php使用redis的幾種常見(jiàn)操作方式和用法示例
這篇文章主要介紹了php使用redis的幾種常見(jiàn)操作方式和用法,結(jié)合實(shí)例形式總結(jié)分析了PHP使用redis實(shí)現(xiàn)字符串緩存、隊(duì)列模擬、樂(lè)觀鎖與悲觀鎖實(shí)現(xiàn)、發(fā)布和訂閱等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
php+html5+ajax實(shí)現(xiàn)上傳圖片的方法
這篇文章主要介紹了php+html5+ajax實(shí)現(xiàn)上傳圖片的方法,對(duì)比分析了js原生及jQuery兩種ajax調(diào)用上傳圖片的方法,以及php圖片上傳處理等技巧,需要的朋友可以參考下2016-05-05
php $_SERVER windows系統(tǒng)與linux系統(tǒng)下的區(qū)別說(shuō)明
本篇文章主要是對(duì)php $_SERVER windows系統(tǒng)與linux系統(tǒng)下的區(qū)別進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02

