排序算法——桶排序 Bucket Sort

桶排序(Bucket Sort)是一種簡單的排序算法,其原理是將所有數組元素,根據其大小範圍分到有限數量的桶裏。再對每個桶分別排序(可用別的排序算法或是以遞歸方式繼續使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結果。當要被排序的數組內的數值是均勻分配的時候,桶排序使用線性時間(Θ(n))。但桶排序並不是比較排序,所以它的下限並不是O(n log n)。

桶排序的一般化算法描述

(1)創建一定數量的數組當作空桶子;

(2)遍歷待排序序列,把每個元素一個一個放到對應的桶子去;

(3)對每個不是空的桶子進行排序;

(4)依次從不爲空的桶中取出元素再放回原來的序列中。

 

當待排序序列的元素個數非常多的時候,如數以億計,直接使用O(nLogn)的排序算法進行排序的效率是很低的,而且要使用的內存也非常大,甚至內存無法容得下那麼大的數據量。這時候桶排序就派上用場了,它可以將數據根據範圍劃分到不同的桶中,每個桶裏的數據量足夠小,所以可以對各個桶分別應用各種排序算法,包括O(nLogn)的算法。所有桶排序完成後,再將它們按次序連接起來,就得到最終的有序序列了。當數據元素均勻分佈的時候,桶排序非常有效。

 

當對0.0到1.0之間的數據序列進行排序時,如何才能使得排序時間比O(nLogn)小呢?答案就是使用桶排序,因爲計數排序要以元素值作爲數組索引,所以對小數無效,所以只能用桶排序。

 

以元素序列0.78, 0.17, 0.39, 0.26, 0.72, 0.94, 0.21, 0.12, 0.23, 0.68爲例,應用桶排序如下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章