演算法導論 計數排序

2021-06-06 21:18:23 字數 746 閱讀 7131

計數排序假設n個輸入元素中的每乙個都是介於0到k之間的整數,此處k為某個整數。

計數排序的基本思想就是對每乙個輸入元素x,確定出小於x的元素個數。有了這一資訊,就可以把x直接放到它在最終輸出陣列中的位置上。例如,如果有17個元素小於x,則x就屬於第18個輸出位置。當有幾個元素相同時,這個方案要略作修改,因為不能把它們放在同乙個輸出位置上。

在計數排序演算法的**中,我們假定輸入是個陣列a[1...n],另外還需要兩個陣列:存放排序結果的b[1...n],以及提供臨時儲存區的c[0...k]。

#include using namespace std;

#define len 8

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

}void main()

; int *b=new int[len];

countsort(a, b, 5);

for(int i=0; i

計數排序執行時間o(n),計數排序不是基於比較的排序演算法。

計數排序的乙個重要性質就是它是穩定的:具有相同值的元素在輸出陣列中的相對次序與它們在輸入陣列中的次序相同。亦即,兩個相同數之間的順序是這樣來規定的,即在輸入陣列中先出現的,在輸出陣列中也位於前面。之所以說計數排序的穩定性非常重要,是因為計數排序經常用作基數排序演算法的乙個子過程。計數排序的穩定性對基數排序的正確性來說,是非常關鍵的。

保證計數排序穩定的重要語句是:for(i=len-1; i>=0; i--)//從後往前處理a中的元素,以保證穩定性。

演算法導論 計數排序

不管所堆排序,還是快速排序,排序的本質都所基於各個元素之間的比較。而可以證明的是,所有基於比較的排序演算法,在最壞情況下的時間複雜度的下界是o nlgn 而,計數排序不所基於元素之間的比較,而是,對於乙個輸入x,在整個輸入中確定出小於x的元素個數,這樣就可以把元素x直接放在它在最終輸出陣列中的確定位...

計數排序(線性時間排序) 演算法導論

之前的排序都是通過比較得到的,即比較排序 在排序的最終結果中,各元素的次序依賴與它們之間的比較。而時間複雜度最好的也是o nlgn 接下來說乙個未經比較的排序,而複雜度則是線性的。計數排序 假設n個輸入元素的每乙個都是在0 k區間內的乙個整數,其中k為某個整數。當k o n 時,排序的執行時間為o ...

演算法導論 c 實現計數排序

計數排序的基本思想為 對每乙個輸入的元素x,確定出小於x的元素的個數。有了這一資訊,那麼就可以把x直接放到相應的位置上。特點 1 需要臨時的儲存空間,如果排序資料範圍特別大時,空間開銷很大。2 適合於排序0 100以內的資料。3 排序的時間複雜度為o n include include const ...