非比較排序 計數排序

2021-10-05 18:31:10 字數 962 閱讀 1878

計數排序是乙個非基於比較的排序演算法,該演算法於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 做個排序。我們如何設計乙個最高效的排序演算法。本文不光給出計數排序演算法的傳統寫法,還將一步步深入討論演算法的優化,直到時間複雜度和空間複雜度最...