排序算法(10)------桶排序

桶排序


1、原理:

在比较排序的算法中,快速排序的性能最佳,时间复杂度是O(n*logn).因此,在使用比较排序时,时间复杂度的下限就是O(n*logn)。而桶排序的时间复杂度是O(n+c),因为它的实现并不是基于比较实现的,而是基于映射函数实现的。

桶排序工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

桶排序利用函数的映射关系,减少了几乎所有的比较工作。实际上,桶排序的f(k)值的计算,其作用就相当于快排中划分,已经把大量数据分割成了基本有序的数据块(桶)。然后只需要对桶中的少量数据做先进的比较排序即可。


2、基本思路

桶排序(Bucket Sort)的基本思路是:

  1. 将待排序元素划分到不同的桶。先扫描一遍序列求出最大值 max和最小值 min,设桶的个数为m,则把区间 [min, max] 均匀划分成 m 个区间,每个区间就是一个桶。将序列中的元素分配到各自的桶。

  2. 对每个桶内的元素进行排序。可以选择任意一种排序算法。

  3. 将各个桶中的元素合并成一个大的有序序列。


3、时间复杂度和空间复杂度

对于n个待排数据,m个桶,平均每个桶[n/m]个数据的桶排序平均时间复杂度为:

 O(n)+O(m*(n/m)*log(n/m))=O(n+n*(logn-logm))=O(n+n*logn-n*logm)

当n = m时,即极限情况下每个桶只有一个数据时。桶排序的最好效率能够达到O(n)

空间复杂度:n个元素+m个桶(n个元素归到m个桶中,还需要m长度表示每个桶)

O(n+m)

4、具体例子

详见 Maximum Gap



桶排序、计数排序和基数排序的区别联系


1、计数排序

这里写图片描述


2、基数排序

这里写图片描述

为什么时间复杂度为O(n*d),空间复杂度为O(n+k)?

k为基数即代表k进制
d为每个元素的位数,显然当k=2时,d最大,当k=所有元素最大值时,d最小
n代表元素总个数
w[0,...n-1]用来保存所有元素每一位上的数,每个元素均是0~k中的一个值
crr[0,..k]保存所有元素每位上0-k出现的次数(每位上的排序采用计数排序)
比如:k=10 ,123位数为d=3,则时间复杂度为O(n*d),空间复杂度为O(n+k)


3、三者区别联系

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值