到目前為止,一共整理總結了五大排序演算法:
1、插入排序
2、冒泡排序、選擇排序、交換排序 (把這三種方法歸為一種,因為他們的思想本質上都是一樣的)
3、歸併排序
4、堆排序
5、快速排序
以上五種排序都可以稱為“比較排序”,顧名思義,因為他們都是基於比較元素 來決定其相對位置的。
其中前兩種的時間為O(n^2),歸併排序和堆排序最壞O( n lg n ),快排平 均O( n lg n )
定理:任意一種比較排序演算法最壞情況下,都需要做 Ω( n lg n )次的比較。
我們通過決策樹來證明:
●決策樹(decision tree)
比較排序可以被抽象的視為決 策樹。撒一顆決策樹是一顆滿二叉樹,表示某排序演算法作用於給定輸入元素所作的所有比較,而其它因素忽 略。
假設有一組三個元素的序列,我們用1,2,3來分別表示這三個元素,我們基於比較來對它排序, 可以有下列決策樹:
不難發現,判定樹的葉子表示了三個元素的所有可能排列。
另外,用比較排序對這三個元素進行排序 的話,你總可以找到一條路徑來表示它的整個比較過程。(需要注意的是,1並不表示它代表第一個元素,它 可以代表三個元素中任意一個。2,3也相同。但是1,2,3不指向相同元素)。顯然最壞情況下的複雜度即是 判定樹的高。
對於一顆高度為H的、具有L個可達分葉節點的決策樹,它對應於對N個元素所作的比較排 序。因為N個元素有N!種排列(排列組合知識), 每一種都作為一個葉子出現在書中,故有N!<=L(重要, 註:)有又由於在一顆高為H的二叉樹中,葉子的數目不多於2^H,則有 N! <= L <= 2^H
對該式 子取對數,得到:
H>=lg(N!) (因為lg函 數時單調遞增的)
=Ω(N lg N)
註: 一開始我以 為應該是等於的關係,後來百度了一下,原文有這一句:Because each of the N! permutation appears as areachable leaf. 作者的意思著重於用N!來表示N個元素的所有可能排列,但是N個元素的所有可能排列實 際上是小於等於N!的,因為在N個元素中有可能有相等的元素。