計數排序是乙個非基於比較的排序演算法,該演算法於2023年由 harold h. seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為ο(n+k)(其中k是整數的範圍),快於任何比較排序演算法。 [1] 當然這是一種犧牲空間換取時間的做法,而且當o(k)>o(nlog(n))的時候其效率反而不如基於比較的排序(基於比較的排序的時間複雜度在理論上的下限是o(nlog(n)), 如歸併排序,堆排序)
思想主要就是,根據序列的最大最小值,來確定資料的範圍,然後以最小值為基準,最大最小值的差為陣列長度,用序列的每乙個資料減去基準值所得的數字key,然後在陣列下標k的地方++,遍歷完之後,再把資料依次寫回即可。
**實現:
// 計數排序
void
countsort
(int
* arr,
int size)
int range = maxvalue - minvalue +1;
//申請空間
int* temp =
(int*)
malloc
(sizeof
(int
)* range);if
(null
== temp)
memset
(temp,
0, range *
sizeof
(int))
;//統計每乙個數字出現的個數
for(
int i =
0; i < size; i++
) temp[arr[i]
- minvalue]++;
//**資料
int index =0;
for(
int i =
0; i < size; i++
)free
(temp)
;}
非比較排序 計數排序
計數排序 count sort 是乙個非基於比較的排序演算法,該演算法於1954年由 harold h.seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為 n k 其中k是整數的範圍 快於任何比較排序演算法。計數排序的思想類似於雜湊表中的直接定址法,在給定的一組序列中,先找出該...
計數排序 非比較排序
1.統計相同元素出現的個數 2.根據統計結果將序列 到原來的序列中 整體思路如下圖 判斷最大最小值的差值 int a newint count 開空間 memset a,0 sizeof int count 記得將原空間清空 for int i 0 i n i int j 0 int q 0 whi...
內部非比較排序 計數排序
計數排序是一種演算法複雜度 o n 的排序方法,適合於小範圍集合的排序。比如 100萬學生參加高考,我們想對這100萬學生的數學成績 假設分數為0到100 做個排序。我們如何設計乙個最高效的排序演算法。本文不光給出計數排序演算法的傳統寫法,還將一步步深入討論演算法的優化,直到時間複雜度和空間複雜度最...