桶排序(python)

9.桶排序

9.1 算法思想

桶排序假设待排序的一组数均匀独立的分布在一个范围中,并将这一范围划分成几个子范围(桶)。然后基于某种映射函数f (高效与否的关键就在于这个映射函数的确定),将待排序列的关键字 k 映射到第i个桶中 (即桶数组B 的下标i) ,那么该关键字k 就作为 B[i]中的元素。接着将各个桶中的数据分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排) 。然后依次枚举输出 B[0]….B[M] 中的全部内容即完成了一个数组的桶排列。

ps:桶排序可以有很多方法,具体区别在于映射函数、桶、以及桶内排序的方法不同。

由于要构造桶,因此需要额外的空间,空间复杂度为o(n+k),时间复杂度为o(n+k),最好是o(N),且桶排序是稳定的。

9.2 算法过程

  1. 设置一个定量的数组当作空桶;(当数字少的时候,可以设置n个桶,只把相等的数放在同一个桶,不过这种方法空桶过多,数字多的时候回消耗极大的空间。数字多的时候可以少设置几个桶,利用映射关系将多个数放在一个桶。)(类似于系统抽样,是指尽可能均匀分布在各个桶里)
  2. 遍历输入数据,并且把数据映射完之后,一个一个放到对应的桶里去;
  3. 对每个不是空的桶进行排序;
  4. 从不是空的桶里把排好序的数据拼接起来。
    在这里插入图片描述
桶的数量等于待排序元素数量展示,其中范围分别是[0,9),[10,19),……,[90,99)

在这里插入图片描述

9.3 python代码

def bucktetSort(numList,bucketNum):
    if len
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值