第 28 題:如何理解計數排序?
什麼是計數排序?
計數排序不是基於比較的排序演算法,其核心在於將輸入的資料值轉化為鍵儲存在額外開闢的陣列空間中。 作為一種線性時間複雜度的排序,計數排序要求輸入的資料必須是有確定範圍的整數
計數排序最重要的一點,確定範圍的整數,比如說範圍 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第 30 題:如何理解基數排序?排序
- 看圖輕鬆理解計數排序排序
- 15.百萬考生成績如何排序 - 計數排序排序
- 如何理解插入排序?排序
- 計數排序、桶排序和基數排序排序
- 計數排序vs基數排序vs桶排序排序
- 計數排序排序
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- Java排序之計數排序Java排序
- 計數排序的原址排序排序
- 基數排序的簡單理解排序
- ocp 052 第62題 理解
- 非交換排序-計數排序和桶排序排序
- 排序演算法__計數排序排序演算法
- 每週分享第 28 期
- 基於桶的排序之計數排序排序
- (戀上資料結構筆記):計數排序、基數排序 、桶排序資料結構筆記排序
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- 三言兩語說清【基數排序】與【計數排序】排序
- 計數排序 - Counting Sort排序
- 什麼是計數排序?排序
- 計數排序 -- GoLang實現排序Golang
- 華恩JAVA班第28天Java
- 理解希爾排序排序
- JavaScript計數排序演算法JavaScript排序演算法
- 75. Sort Colors:計數排序排序
- 新學習的計數排序排序
- Scala 技術週刊 | 第 28 期
- 如何使用Python語言實現計數排序演算法?Python排序演算法
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 第 4 章 程式計數器
- 面試題:如何理解閉包面試題
- 漫畫:什麼是計數排序?排序
- rust-algorithms:6-計數排序RustGo排序
- 資料結構之計數排序資料結構排序
- 計數排序+uva11462排序
- 演算法系列:計數排序演算法排序
- 阿里雲前端週刊 – 第 28 期阿里前端