桶排序(百度百科)
桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n*log n) 下限的影响。
排序思路(图片来自小灰)
桶排序是计数排序的升级版,可以不用局限于整数。思路大致相似。首先要确定桶的区间范围。计算方式是(Max - Min)/ (length -1)。length表示桶的数量,然后最后一个桶表示最大值,其他的桶就分范围来存储数据。
然后遍历数据把数据填入桶中。
桶内进行排序。
最后遍历所有桶,把数据以此输出0.5、0.84、2.18、3.25、4.5。然后排序结束。
代码
1 | package sort; |
运行结果
总结
这个桶排序也是一种线性时间的排序算法。因为它不是通过比较来进行排序,而是通过桶来排序。理论上时间复杂度为O(N)。对桶排序感兴趣的可以深入学习一下。