引言
前面學習了計數排序和基數排序,其實桶排序就是他們的升級版,在這篇文章中主要會說明桶排序的思想,就不放桶排序的代碼了,因爲桶排序用的較少,至於爲啥他用的很少,下面會說。
這篇文章從一下兩個角度分析桶排序
- 桶排序的思想
- 桶排序的問題
一、桶排序的思想
假如我們對0.0 0.12 0.18 0.93 0.45 0.76 0.89 0.03 0.55 0.98 0.67 1.0這十二個數排序。桶排序的思想就主要分三步
- 設計好有幾個桶,每個桶的範圍都爲多少
- 對每個桶進行排序
- 按照順序,把每個桶的數據都取出來
下面看圖
我們一共分了四個桶,每個的範圍也都提前規定好了。截止到現在,第一步就完成了
第二步就是對每個桶進行排序,這裏採取的排序方法可以任選,沒有硬性規定。
第三步就是按照桶排序好的順序,一個個把桶內的數據輸出來。
到此爲止,桶排序的思想就說完了,思想比較容易理解,但是實現比較困難,下面展開說。
二、桶排序的問題
首先再總結一下流程,
- 求要排序數組的最大值和最小值,根據這兩個值,再根據定幾個桶,來定每個桶的範圍。
- 對每個桶都進行排序。
- 按照順序輸出每個桶的數據
下面說爲啥桶排序不常用的原因。
- 每個桶如果用數組存數據,那如果數組不夠用怎麼辦?,因爲一組數可能有的很集中,有的很分散,如果數組開大了,那分散的數,就會造成空間浪費。
- 如果每個桶用鏈表存,那就不用提前開闢空間了,但是又存在了時間問題,因爲如果對鏈表進行排序,只能進行一遍一遍的遍歷(訪問鏈表的數據不能隨機訪問),那時間複雜度就特別大了。
- 如果一個要排序的數據特別集中,比如有1000個數據,結果超過了800個數據在一個桶內,那桶排序的優勢更體現不出來了。
如果對其他的算法還有興趣,可以點擊下面的鏈接。