計數排序實現及比較

2021-08-26 04:44:56 字數 757 閱讀 5054

計數排序利用的是陣列的隨機訪問特性,將要排序的數k轉換成陣列的下標k,該陣列中以k為下標的值a[k]代表這個數k的個數。這種排序非常快,但應用條件比較苛刻。

主要受需要排序的序列規模(n),序列最大值(max(n))影響,如果max(n)過大,演算法空間複雜度比較高,也是該演算法的乙個制約因素。下面是兩種方式實現:

1) 第一種方式速度比第2種快,但沒有穩定性,而且不能用於基數計數排序。

private void countsort(int a)

thec[a[i]-1]++;

thecount++;

}int j = 0;

for (int i = 0; i < themaxval; i++)}}

2)教科書裡的演算法,優點是具有穩定性,可用於基數計數排序。速度比前一種要慢些。時間約為2(n+k)

private int countsort2(int a)

thec[a[i]-1]++;

thecount++;

}for (int i = 1; i < themaxval; i++)

for (int i = thelen-1; i>=0; i--)

return theb;

}private void addlength(listc, int maxlen)

}後記:計數演算法適合序列元素比較集中,差值不大的情況。如果知道乙個序列的最大值和最小值,而且最大值與最小值相差不是很大的情況,比較適合用這種排序。

字母排序,簡單數字符號(0-9)排序等。

非比較排序 計數排序

計數排序 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...

非比較排序 計數排序

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