第 28 題:如何理解計數排序?

Jack2k發表於2021-09-09

什麼是計數排序?

計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數

計數排序最重要的一點,確定範圍的整數,比如說範圍 0-10,那麼陣列裡面的值就要在 0-10 之間

栗子

序列:9,3,5,4,9,1,2,7,8,1,3,6,5,3,4,0,10,9 ,7,9

首先確定序列的範圍是 0-10,並且列出範圍的序列,如圖 1

比如第一個整數是 9,那麼陣列下標為 9 的元素加 1

圖片描述

#圖 1

第二個整數是 3,那麼陣列下標為 3 的元素加 1,如圖 2

圖片描述

#圖 2

以此類推重複遍歷…

最終遍歷完成後狀態如下,如圖 3

圖片描述

#圖 3

陣列每一個下標位置的值,代表了在序列中對應整數出現的次數

有了這個“統計結果”,排序就很簡單了。直接遍歷陣列,輸出陣列元素的下標值,元素的值是幾,就輸出幾次

0,1,1,2,3,3,3,4,4,5,5,6,7,7,8,9,9,9,9,10

最後輸出的序列已經是排好序的

圖片描述

這個時候可能會有人問,如果序列的最小值不是從 0 開始呢?

這個時候就要計算偏移量

如何計算偏移量?

以序列的最小值作為偏移量。比如最小值是 90, 那麼整數 95 對應的統計陣列下標就是 95-90 = 5

圖片描述

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/36/viewspace-2807017/,如需轉載,請註明出處,否則將追究法律責任。

相關文章