PHP快速排序算法實(shí)現(xiàn)的原理及代碼詳解
算法原理
下列動(dòng)圖來自五分鐘學(xué)算法,演示了快速排序算法的原理和步驟。
步驟:
從數(shù)組中選個(gè)基準(zhǔn)值
將數(shù)組中大于基準(zhǔn)值的放同一邊、小于基準(zhǔn)值的放另一邊,基準(zhǔn)值位于中間位置
遞歸的對(duì)分列兩邊的數(shù)組再排序
代碼實(shí)現(xiàn)
function quickSort($arr) { $len = count($arr); if ($len <= 1) { return $arr; } $v = $arr[0]; $low = $up = array(); for ($i = 1; $i < $len; ++$i) { if ($arr[$i] > $v) { $up[] = $arr[$i]; } else { $low[] = $arr[$i]; } } $low = quickSort($low); $up = quickSort($up); return array_merge($low, array($v), $up); }
測(cè)試代碼:
$startTime = microtime(1); $arr = range(1, 10); shuffle($arr); echo "before sort: ", implode(', ', $arr), "\n"; $sortArr = quickSort($arr); echo "after sort: ", implode(', ', $sortArr), "\n"; echo "use time: ", microtime(1) - $startTime, "s\n";
測(cè)試結(jié)果:
before sort: 1, 7, 10, 9, 6, 3, 2, 5, 4, 8 after sort: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 use time: 0.0009009838104248s
時(shí)間復(fù)雜度
快速排序的時(shí)間復(fù)雜度在最壞情況下是O(N2),平均的時(shí)間復(fù)雜度是O(N*lgN)。
這句話很好理解:假設(shè)被排序的數(shù)列中有N個(gè)數(shù)。遍歷一次的時(shí)間復(fù)雜度是O(N),需要遍歷多少次呢?至少lg(N+1)次,最多N次。
1) 為什么最少是lg(N+1)次?快速排序是采用的分治法進(jìn)行遍歷的,我們將它看作一棵二叉樹,它需要遍歷的次數(shù)就是二叉樹的深度,而根據(jù)完全二叉樹的定義,它的深度至少是lg(N+1)。因此,快速排序的遍歷次數(shù)最少是lg(N+1)次。
2) 為什么最多是N次?這個(gè)應(yīng)該非常簡(jiǎn)單,還是將快速排序看作一棵二叉樹,它的深度最大是N。因此,快讀排序的遍歷次數(shù)最多是N次。
相關(guān)文章
用PHP實(shí)現(xiàn)讀取和編寫XML DOM代碼
用PHP讀取和編寫XML DOM代碼,需要的朋友可以參考下。2010-04-04PHP實(shí)現(xiàn)數(shù)組遞歸轉(zhuǎn)義的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)數(shù)組遞歸轉(zhuǎn)義的方法,包含了數(shù)組的遞歸調(diào)用與字符串的轉(zhuǎn)義方法,需要的朋友可以參考下2014-08-08收集的二十一個(gè)實(shí)用便利的PHP函數(shù)代碼
這里整理的二十一個(gè)實(shí)用便利的PHP函數(shù)代碼比較適合php開發(fā)過程中的直接使用與學(xué)習(xí)參考,對(duì)每種類型的 PHP 開發(fā)者都會(huì)有所幫助。2010-04-04php表設(shè)計(jì)實(shí)現(xiàn)短視頻評(píng)論區(qū)完整功能
這篇文章主要為大家介紹了php表設(shè)計(jì)實(shí)現(xiàn)短視頻評(píng)論區(qū)完整功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07php官方微信接口大全(微信支付、微信紅包、微信搖一搖、微信小店)
這篇文章主要介紹了php官方微信接口大全,包括微信支付、微信紅包、微信搖一搖、微信小店,感興趣的小伙伴們可以參考一下2015-12-12PHP Laravel軟刪除的實(shí)現(xiàn)方法介紹
軟刪除就是邏輯刪除,數(shù)據(jù)保留單標(biāo)記上刪除狀態(tài),一般我們會(huì)用刪除時(shí)間來作為標(biāo)記,這樣標(biāo)記狀態(tài)有了,刪除時(shí)間也有了2022-09-09PHP中的print_r 與 var_dump 輸出數(shù)組
下面小編就為大家?guī)硪黄狿HP中的print_r 與 var_dump 輸出數(shù)組。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2016-06-06