桶排序(Bucket Sort)
桶排序是計數排序的升級版。它利用了函數的映射關係,高效與否的關鍵就在於這個映射函數的確定。桶排序 (Bucket sort)的工作的原理:假設輸入數據服從均勻分佈,將數據分到有限數量的桶裏,每個桶再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序)。桶的本身必須是保證有序的。
算法描述
- 設置一個定量的數組當作空桶;
- 遍歷輸入數據,並且把數據一個一個放到對應的桶裏去;
- 對每個不是空的桶進行排序;
- 從不是空的桶裏把排好序的數據拼接起來。
圖片演示
代碼實現
因爲每個桶裏面的元素排序可以應用所有的排序算法,所以代碼實現有很多種方式,一般也不會要求單獨寫桶排序的代碼,這裏就不寫了。更重要的是要理解桶排序的這種思想,有很多其它算法應用了桶排序的思想,例如基數排序。
算法分析
桶排序最好情況下的是線性時間O(n),桶排序的時間複雜度,取決與對各個桶之間數據進行排序的時間複雜度,因爲其它部分的時間複雜度都爲O(n)。很顯然,桶劃分的越大,各個桶之間的數據越少,排序所用的時間也會越少。但相應的空間消耗就會增大。桶排序是穩定的。
什麼時候最快
當輸入的數據可以均勻的分配到每一個桶中。
什麼時候最慢
當輸入的數據被分配到了同一個桶中