第八章 線性時間排序

2021-06-15 02:45:53 字數 946 閱讀 6750

這章剛開始證明了基於比較的排序的演算法在最壞情況下,都需要做nlgn次比較。

由此可以推出合併排序快速排序都是漸進最優的比較排序演算法。

線性時間排序:

1.計數排序

計數排序假設n個輸入元素中的每乙個都是介於0~k之間的整數,此處k為某個整數。當k=o(n)時,計數排序的執行時間為o(n)。

計數排序的思想是對每個元素x找出小於x的元素個數,有了這個資訊最後把它直接插入到最終輸出陣列相應的位置即可。比如比它大的有三個則它就應該在第四個位置。

實現**:

void count_sort(int a,int b,int k)

; for(int j=0;j=0;j--)

}

最後需要說明的是計數排序犧牲了空間換取了時間,計數排序是穩定的。

2.基數排序

演算法是根據這張圖來排序的,關於為什麼要從最低位開始排序而不是從最高位開始,主要是因為如果從最高位開始的話,每次比較的話都要對前面的位的數字進行記錄這樣會產生很多中間陣列,然而從最低位開始話,直接就可以排好所有的不用額外操作。能這樣排序的前提建立在每一位的排序都必須是穩定的。

**實現:

// radix_sort.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #define max 7

void count_sort(int m,int a,int b,int k)

; for(int j=0;j=0;j--) }

int min_10(int m,int n)

{ if(0 == n)

return 1;

for(int i=1;i

**還是主要基於基數排序實現每一位的排序,然後依次排完每一位。時間複雜度為計數排序時間複雜度o(n)。

第八章 線性時間排序

比較排序 在排序的最終結果中,各元素的次序依賴於太難之間的比較。決策樹 完全二叉樹,某一特定排序演算法對所有元素的比較操作。節點中標註的是序號不是元素值。需要了解輸入陣列中最大值可能是多大。通過對輸入陣列中的元素進行計數來排序。非原地演算法,需要額外的n k個空間。排序是穩定的。最後乙個迴圈從後向前...

第八章 線性時間排序

輸入 0 k.時間複雜度o k n 當k o n 排序時間為 n 不是比較排序,所以脫離了 nlgn 它根據輸入元素的值確定在陣列中的位置.對於n個d位數,每一位有k個取值,從低位到高位依次穩定排序 n k 那麼時間複雜度為 d n k 對於n個d位數,r d,可以在 d r n 2r 時間內排序....

演算法導論 第八章 線性時間排序

def 之前所有的排序演算法中,各元素的次序依賴於它們之間的比較,我們把這類排序演算法稱為比較排序演算法。8.1.排序演算法的下界 def 決策樹是一棵二叉樹,它可以表示在給定輸入規模情況下,某一特定排序演算法對所有元素的比較操作。即將所有比較後的次序描述為一條到達葉子節點的路徑,而這個路徑唯一,葉...