第 28 題:如何理解計數排序?
阿新 • • 發佈:2021-08-20
什麼是計數排序?
計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數
計數排序最重要的一點,確定範圍的整數,比如說範圍 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
參考資料
值得收藏的十大經典排序演算法
漫畫:什麼是計數排序?
文章的內容/靈感都從下方內容中借鑑
-
【持續維護/更新 500+前端面試題/筆記】
-
【大資料視覺化圖表外掛】https://www.npmjs.com/package/ns-echarts
-
【利用 THREE.JS 實現 3D 城市建模(珠海市)】https://3d.noxussj.top/