這一主要講四個內容,第乙個是證明比較排序的最壞情況的下界,接下來講了三個在某種假設的情況下可以線性時間內執行的排序演算法:計數排序,基數排序,桶排序。
用乙個決策樹來證明,決策樹的深度就是執行時間。通過計算得到結果:
任何比較排序演算法在最壞情況下的執行時間要求是ω(nlgn)。
計數排序做的假設是待排序的陣列元素都將不超過某個整數k,而且k=o(n)。
按大白話來講,就是先統計每乙個整數在陣列大眾的個數,然後在從小到大記下來每乙個整數前面有多少個數。然後從何後往前把數字放就行了。
上偽**
counting-sort(a,b,k)
for i ← 0
to k
do c[i] ← 0
for j ← 1
tolength[a]
do c[a[j]] ← c[a[j]] + 1
δ 這裡是統計陣列中每乙個元素的個數
for i ← 1
to k
do c[i] ← c[i] + c[i-1]
δ 這個迴圈式記錄小於每乙個整數的元素個數
for j ← length[a] downto 1
do b[c[a[j]]] ← a[j]
c[a[j]] ← c[a[j]] - 1
δ 從後往前把陣列元素乙個乙個搬到應有的位置
這裡計數演算法是穩定的排序(stable)
基數排序感覺比較複雜,他的意思是排序的時候從低位開始排序,等排到最高位的時候陣列就已經排好了。
一般是將乙個數字分成幾個部分而不是按每乙個位去排序。這樣的話如何選擇劃分是比較關鍵的問題。
我也沒怎麼懂。就不說了。
這個就更神奇了,他假設數入的數字是【0,1)的範圍並且是均勻分布的。
解釋起來比較費勁。
上偽**
bucket-sort(a)
n ← length[a]
for i ← 1
to n
do insert a[i] into list b[floor(na[i])]
for i ← 0
to n-1
dosort list b[i] with insertion sort
concatenate the lists b[0],b[1],...,b[n-1] together in order
演算法導論 第八章 線性時間排序
def 之前所有的排序演算法中,各元素的次序依賴於它們之間的比較,我們把這類排序演算法稱為比較排序演算法。8.1.排序演算法的下界 def 決策樹是一棵二叉樹,它可以表示在給定輸入規模情況下,某一特定排序演算法對所有元素的比較操作。即將所有比較後的次序描述為一條到達葉子節點的路徑,而這個路徑唯一,葉...
第八章 線性時間排序
這章剛開始證明了基於比較的排序的演算法在最壞情況下,都需要做nlgn次比較。由此可以推出合併排序快速排序都是漸進最優的比較排序演算法。線性時間排序 1.計數排序 計數排序假設n個輸入元素中的每乙個都是介於0 k之間的整數,此處k為某個整數。當k o n 時,計數排序的執行時間為o n 計數排序的思想...
第八章 線性時間排序
比較排序 在排序的最終結果中,各元素的次序依賴於太難之間的比較。決策樹 完全二叉樹,某一特定排序演算法對所有元素的比較操作。節點中標註的是序號不是元素值。需要了解輸入陣列中最大值可能是多大。通過對輸入陣列中的元素進行計數來排序。非原地演算法,需要額外的n k個空間。排序是穩定的。最後乙個迴圈從後向前...