基数排序

基数排序:

思想:基数排序可以看成是桶排序的扩展,以整数排序为例,主要思想是将整数按位数划分,准备 10 个桶,代表 0 - 9,根据整数个位数字的数值将元素放入对应的桶中,之后按照输入赋值到原序列中,依次对十位、百位等进行同样的操作,最终就完成了排序的操作
基数排序是有多个关键字的数据的排序算法
是八大排序中唯一不需要两两数据比较的算法
例如扑克牌:关键字有花色,大小
数据的关键字就在于位及每个位的大小
**

图解:
在这里插入图片描述
代码的思路:
循环以下整体(以循环的位数为依据:个位、十位、百位…):
1.按照位数将数据插入到相应的队列中
2.按照队列的顺序依次将数据弹出
代码的过程:
1.获取最大数据的位数(得到循环的次数)
2.将所有的数据按照顺序(每个位的值的顺序)插入到队列中
3.按照队列的顺序将所有的数据弹出

基数排序的代码:

1.设计十个大小的队列数组,对应的下标即数据相应位下的数字:
在这里插入图片描述
2.得到所有待排序数据的最大位数,即循环的次数:
在这里插入图片描述
3.获得数据data的width位上的数字:
在这里插入图片描述

4.依次打印数组:
在这里插入图片描述

5.开始基数排序:
在这里插入图片描述
在这里插入图片描述
6.执行基数排序:
在这里插入图片描述
7.执行结果:
在这里插入图片描述

基数排序的特征:

  1. 时间复杂度:O(k*(n+m))
    k 为关键字个数,本文的上述距离关键字为 4 个,分别是个位、十位、百位、千位;m 为 关键字的取值范围,本文的举例关键字取值范围 m 为 10(0 - 9);n 为待排序序列的元素数量。
    总共遍历 k 遍,每一遍包含:将每个元素放进桶中(n) 与 将桶中元素收回到原序列中(m),所以时间复杂度为 O(k*(n+m))。
  2. 空间复杂度:O(n+m)
    m 个桶与存放 n 个元素的空间
    3.稳定性分析:稳定
    基数排序不会改变相同元素之间的相对位置,仔细思考一下过程,元素收回的过程中是从后向前进行的。
    所以,基数排序是稳定的排序算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值