計數(shù)排序

1.計數(shù)排序特點

1.一般輸入的關(guān)鍵字都在0到k區(qū)間內(nèi)的一個整數(shù),其中k為某個整數(shù);
2.當(dāng)輸入的元素個數(shù)為n時,排序的時間復(fù)雜度為O(n);
3.計數(shù)排序需要額外的空間,k越大需要的額外空間越大,因為需要k長度的數(shù)組;

2.計數(shù)排序介紹

計數(shù)排序的基本思路:對每一個輸入元素x,確定小于x的元素個數(shù)(假設(shè)為a),那么x可放到輸出數(shù)組的a位置上。例如,如果有10個元素小于x,則x就應(yīng)該放在第11個輸出的位置上。

3.計數(shù)排序的偽代碼

假設(shè)輸入是一個數(shù)組A [0..n-1],A.length = n。需要另外兩個數(shù)組:B[0..n-1]存放排序后輸出,C[0..k]提供計數(shù)使用。

COUNTING-SORT(A,B,k)
let C[0,k] to be a new array
// 重置C[0..k]個元素為0
for i = 0 to k  
    C[i] = 0;
// A[0..n-1]數(shù)組中A[j]有幾個計數(shù)在C[A[j]]上
for j = 0 to A.length -1
    C[A[j]] = C[A[j]] + 1
// 計算A[0..n-1]中比A[j]小的個數(shù),即C[0..k]中比A[j]下標(biāo)小的計數(shù)之和(這里需要理解一下,
//比如A[10] = 30,那么C[0..29]是對應(yīng)A[0..n-1]數(shù)組中0到29的個數(shù),0到29可能有些數(shù)沒有,對應(yīng)的個數(shù)為0)
for i = 1 to k
    C[i] = C[i] + C[i - 1]      // C[i]即為i = A[x]的小于等于i的個數(shù)
// 把A[0..n-1]排序輸出到B[0..n-1]
for j = A.length-1 downto 0
    count = C[A[j]]
    B[count -1] = A[j]
    C[A[j]] = C[A[j]] - 1       // 把A[j]的個數(shù)減1

圖解步驟如下:

算法-計數(shù)排序1.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容