當前位置:成語大全網 - 書法字典 - PHP快速排序實現的原理和代碼細節

PHP快速排序實現的原理和代碼細節

算法原理

下面的動畫來自五分鐘算法,演示了快速排序的原理和步驟。

步驟:

從數組中選擇壹個參考值。

將數組中大於基準值的放在同壹側,小於基準值的放在另壹側,基準值放在中間。

遞歸地重新排列列兩邊的數組。

代碼實現

功能

快速排序($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快速排序示例詳解