排序算法——桶排序 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为例,应用桶排序如下

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