JavaScript桶排序算法詳解

一、桶排序算法

桶排序(Bucket sort)箱排序,是一個排序算法,工作的原理是將數組分到幾個桶裡,桶的數量可由排序數組最大值與最小值關係決定,可以固定幾個桶。每個桶內再通過插入、冒泡或簡單方式進行排序。其算法複雜度接近於:O(N)

步驟是:

1. 找到待排序中最大和最小的元素;

2. 得到桶的數量,比如最大減去最小再除以最小值;

3. 新建一個桶列表,然後遍歷數組,再將數組項除以桶的個數得到要存放的桶的下標,將數組項存入到對應桶中;

4. 存入到桶中時,按順序插入,保持順序;

5. 數據全部放入桶之後,再遍歷桶列表,將二維數組按順序展開取出即可。

二、計數排序算法執行過程分析:

JavaScript桶排序算法詳解

三、桶排序代碼JS簡版

JavaScript桶排序算法詳解

output: [3, 3, 3.2, 4.3, 10, 15]

四、桶排序標準版,支持負數

JavaScript桶排序算法詳解

JavaScript桶排序算法詳解

output: [-7, -2.1, 3, 3, 3.2, 4.3, 10, 15]

五、總結

計數排序(Counting sort)、基數排序(radix sorting)和桶排序(Bucket Sort)是很類似的排序方式,都是非比較型的排序算法。

計數排序從最最小到最大值建立全部長度數組,然後挨個放裡面放入,這對於數據範圍很大的數組,需要大量時間和內存,適用性不高。

基數排序是統一為同樣的數字長度,數字較短的數前面補零,也就是將數字拆分為個位十位百位。然後從最低位開始,依次進行一次排序。基數排序是線性複雜度,即對n個數字處理了n次,代價較高。

桶排序將數組分到有限數量的桶子裡,然後對每個桶子再分別進行排序,不需要過多的桶。對於大量數組,可以先採用桶排序分拆,再用其他排序算法來進行桶內排序。


分享到:


相關文章: