非比較排序 計數排序

2021-08-30 21:32:16 字數 679 閱讀 8882

**計數排序(count sort)**是乙個非基於比較的排序演算法,該演算法於2023年由 harold h. seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為ο(n+k)(其中k是整數的範圍),快於任何比較排序演算法。

計數排序的思想類似於雜湊表中的直接定址法,在給定的一組序列中,先找出該序列中的最大值和最小值,從而確定需要開闢多大的輔助空間,每乙個數在對應的輔助空間中都有唯一的下標。

計數排序的思路如下

1、找出序列中最大值和最小值,開闢max-min+1的輔助空間

2、最小的數對應下標為0的位置,遇到乙個數就給對應下標處的值+1,。

3、遍歷一遍輔助空間,就可以得到有序的一組序列

**實現如下

void countsort(int* arr, int n)

if(arr[i] < min)

}range = max - min + 1;//需要開闢空間的大小

count = (int*)malloc(sizeof(int)*range);

memset(count,0,sizeof(int)*range);//把輔助空間初始化為0

for(i=0; ifor(i=0; ifree(count);

count = null;

}

計數排序 非比較排序

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...

非比較排序 計數排序

計數排序是乙個非基於比較的排序演算法,該演算法於1954年由 harold h.seward 提出。它的優勢在於在對一定範圍內的整數排序時,它的複雜度為 n k 其中k是整數的範圍 快於任何比較排序演算法。1 當然這是一種犧牲空間換取時間的做法,而且當o k o nlog n 的時候其效率反而不如基...

內部非比較排序 計數排序

計數排序是一種演算法複雜度 o n 的排序方法,適合於小範圍集合的排序。比如 100萬學生參加高考,我們想對這100萬學生的數學成績 假設分數為0到100 做個排序。我們如何設計乙個最高效的排序演算法。本文不光給出計數排序演算法的傳統寫法,還將一步步深入討論演算法的優化,直到時間複雜度和空間複雜度最...