下面的動畫來自五分鐘算法,演示了快速排序的原理和步驟。
步驟:
從數組中選擇壹個參考值。
將數組中大於基準值的放在同壹側,小於基準值的放在另壹側,基準值放在中間。
遞歸地重新排列列兩邊的數組。
代碼實現
功能
快速排序($arr)
{
$len
=
count(arr);
如果
($len
& lt=
1)
{
返回
$ arr
}
五美元
=
$ arr【0】;
低美元
=
$up
=
array();
為
($i
=
1;
$i
& lt
$ len
++$i)
{
如果
($ arr【$ I】
& gt
$v)
{
$up【】
=
$ arr【$ I】;
}
其他
{
$low【】
=
$ arr【$ I】;
}
}
低美元
=
快速排序(低);
$up
=
快速排序(up);
返回
array _ merge($ low,
數組($v),
$ up);
}
測試代碼:
$開始時間
=
microtime(1);
$arr
=
範圍(1,
10);
shuffle(arr);
回聲
“以前
排序:
",
內爆(,
,
$arr),
”\ n”;
$sortArr
=
quick sort(arr);
回聲
“之後呢
排序:
",
內爆(,
,
$sortArr),
”\ n”;
回聲
“使用
時間:
",
微時間(1)
-
$startTime,
”s \ n”;
測試結果:
以前
排序:
1,
7,
10,
9,
6,
3,
2,
5,
4,
八
在...之後
排序:
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
使用
時間:
0.0009009838104248s
時間復雜性
快速排序的時間復雜度在最壞情況下為O(N2),平均時間復雜度為O(N * lgN)。
這句話很容易理解:假設排序後的數列中有n個數字。壹次遍歷的時間復雜度為O(N)。需要穿越多少次?最少LG(N+1)次最多N次。
1)
為什麽LG(N+1)最少?快速排序采用分治法。我們把它看成壹棵二叉樹,它需要遍歷的次數就是二叉樹的深度。根據完全二叉樹的定義,其深度至少為LG(N+1)。因此,快速排序的遍歷次數至少為LG(N+1)。
2)
為什麽最多n次?這應該非常簡單,或者將快速排序視為二叉樹,其最大深度為n .因此,快速讀取排序的最大遍歷次數為n次。
您可能感興趣的文章:PHP快速排序案例分析PHP四種排序算法的實現和效率分析快速排序的冒泡排序、插入排序、選擇排序和快速排序PHP排序算法(快速
Sort)及其優化算法詳細說明了php遞歸實現快速排序的方法
二維數組快速排序實現代碼PHP常用排序算法示例總結基本排序、冒泡排序、快速排序、插入排序PHP快速排序示例詳解