排序算法--基数排序

1. 什么是基数?

假设长度为n的线性表中每个结点aj的关键字由d元组(kjd-1, kjd-2, kjd-3,..., kj1, kj0)
例如:关键字483,个位:3;十位:8;百位:4;取值范围是 0 < k < 9,则基数r = 10, d = 3。

注:基数排序不是基于“比较”的排序算法。

2. 算法思路

初始化:将整个关键字拆分为d位(或“组”),按照各个关键字位权重递增的次序,做d趟“分配”和“收集”,若当前处理的关键字位可能取值r个值,则需要建立r个队列。

分配:顺序扫描各个元素,若当前处理的关键字位=x,则将元素插入Qx队尾。

收集:把Qr-1,Qr-2,… ,Q0各个队列中的结点依次出队并链接。

步骤如下:
原队列:在这里插入图片描述

  1. 第一趟:按个位进行“分配”
    在这里插入图片描述

  2. 第一趟:“收集”结束后,得到按“个位”递减排序的序列
    在这里插入图片描述

  3. 第二趟:按十位进行“分配”
    在这里插入图片描述

  4. 第二趟:“收集”结束后,得到按“十位”递减排序的序列
    在这里插入图片描述

  5. 第三趟:按百位进行“分配”
    在这里插入图片描述

  6. 第三趟:“收集”结束后,得到按“百位”递减排序的序列
    在这里插入图片描述

  • 空间复杂度:O®。
  • 时间复杂度:O(d*(n+r))。
  • 算法稳定性:稳定。
  • 适用性:链表。

3. 适用场景

  1. 数据元素的关键字可以方便地拆分为d组,且d较小。(例如:学校学生的年龄,可拆分为年、月、日)
  2. 每组关键字的取值范围不大,即r较小。(例如:日可以取1-31,月取1-12,年取1990-2023)
  3. 数据元素个数n较大。(例如:学校学生10000名)

排序算法-8种常见内部排序算法和4种外部排序算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值