数据结构(八)——内部排序之桶排序和基数排序

桶排序的概述

重要的参数

  • a【】:作为桶的数组
  • count【】:记录前若干个桶的累计

基本思想

  • 首先进行一次扫描,知道了所要排的数据的最小值和最大值(即位于哪个区间)

  • 通过知道的区间设立桶的个数,每个桶对应一个值

  • 首先扫描一边,利用count【】记录桶中每个数据出现的次数(第一次对count【】操作)

  • 将count【】数组的元素从头开始向后累加(第二次对count【】操作)

    (图片来源于 mooc - 数据结构与算法 - 北京大学 - 张铭)

  • 这个时候,count【】里面存的就是每个桶对应的数扫描到后应该在的最后位置,且每扫描到一个数,该数存储到相应的位置后,对应桶的count【】- 1 (这个操作是因为每一个桶对应的元素可能不止一个,排序后的数的count【】 - 1 后就是确立了重复的数应该排的位置)

  • 执行到待数组全排序后即可
    算法分析

  • 时间复杂度:O(n + m),n为数组的个数,m为桶的个数,适用于m相对于n很小的情况

  • 辅助空间:O(m)

基数排序的概述

关键参数

  • Q【0~9】:一个长度为十的队列,队列中0-9都为链表的头

基本思想

  • 首先,对待排关键字的个位数进行排序,为0的排到Q【0】,为 1 的排到Q【1】,以此类推,排序完后,将排序好后的数据从Q【0】开始到Q【9】读回原本的存储待排序列的数组里
  • 然后,对第一次排好的关键字的十位进行比较,规则如上。
  • 一直重复以上步骤,每重复一次,位数往高位挪一位,直到全部数的最高位挪完。
  • 则那时导回存储的数组里的序列为排好序的序列

算法分析

  • 时间复杂度:O(dn),d为关键字的位数
  • 空间复杂度:O(n + B)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值