計數排序(counting sort)

2022-01-23 16:32:51 字數 1546 閱讀 8930

計數排序是一種穩定的排序演算法,它不是比較排序。計數排序是有條件限制的:排序的數必須是n個0到k的數,所以計數排序不適合給字母排序。計數排序時間複雜度:o(n+k),空間複雜度:o(k),當k=n時,時間複雜度可以達到o(n)。

計數排序思想:給定乙個符合規定的無序陣列,先求出這個陣列中最大的數,然後開闢乙個輔助陣列,將無序陣列中的數對應到輔助陣列中,並計算出每個數出現的次數。再繼續從輔助陣列中得出到了每個位置,需要排序的陣列中的數出現了幾次,然後對應的將無序的陣列賦值給另乙個陣列。

排序過程:

a:2  5  3  0  2  3  0  3              c:2  0  2  3  0  1

位置:0  1  2  3  4  5  6  7           位置:0  1  2  3  4  5

c:2  2  4  7  7  8

位置:0  1  2  3  4  5

b:                  3                  c:2  2  4  6  7  8

位置:0  1  2  3  4  5  6  7            位置:0  1  2  3  4  5

b:   0              3                    c:1  2  4  6  7  8

位置:0  1  2  3  4  5  6  7              位置:0  1  2  3  4  5

b:   0           3  3                    c:1  2  4  5  7  8

位置:0  1  2  3  4  5  6  7              位置:0  1  2  3  4  5

b:0  0  2  2  3  3  3  5

位置:0  1  2  3  4  5  6  7

示例**:

#include #include 

#include

void countingsort(int arraya, int arrayb, int n) //

進行計數排序

int * arrayc = (int *)malloc(sizeof(int)*(max+1)); //

開闢乙個陣列空間,用來儲存各個數出現的次數

memset(arrayc, 0, sizeof(int)*(max+1)); //

將開闢的陣列進行初始化為0

for(int i = 0; i//

計算各個數出現的次數

arrayc[arraya[i]]++;

for(int i = 1; i<=max; i++) //

進行次數的累加,以知道到了那個數,出現了幾個要排序的數

arrayc[i] += arrayc[i-1

];

for(int i = n-1; i>=0; i--) //

從高位到低位排序,保證了穩定性

free(arrayc);

//釋放記憶體

}int

main()

python計數排序 Python 計數排序

1.python coding utf 8 def counting sort a,b,k 計數排序,偽碼如下 counting sort a,b,k 1 for i 0 to k 初始化儲存區的值 2 do c i 0 3 for j 1 to length a 為各值計數 4 do c a j ...

排序 計數排序

資料結構和演算法系列目錄 不斷更新 計數排序是一種線性時間的排序,它的時間複雜程度為o n 雖然是線性的時間複雜程度,但是它的空間複雜程度比較高,而且用之前需要有乙個硬性的前提。這個前提在後面給出,這裡先來簡單介紹一下計數排序。計數排序是先掃瞄一邊待排序陣列,並用乙個輔助陣列記錄待排序每個元素應該在...

排序 計數排序

計數排序假設n個輸入元素中的每乙個都是在0到k區間內的乙個整數,其中k為某個整數。當k o n 時,排序的執行時間為 n 計數排序的基本思想是 對每乙個輸入元素x,確定小於x的元素個數。利用這一資訊,就可以直接把x放到它在輸出陣列中的位置上了。例如,如果有17個元素小於x,則x就應該在第18個輸出位...