排序算法-基数排序详细图解以及为什么从低位开始

基数排序:

基数排序的原理并不难从低位开始 先对个位进行排序 对个位排完序的数组 在进行十位排序 以此类推 最后就可以得到一个有序数组

理解起来很简单但是大多数人会有2个问题

1.为什么不从高位开始?

首先基数排序是对桶排序的一种扩展用的是10个队列本身就挺消耗空间的如果从高位开始你还要利用递归的思想对每个队列在进行排序在准备10个队列 以此类推直到一个数一个队列为止 这样虽然符合基数排序的规则但是会大大浪费空间

还有一种办法就是从高位开始然后对每个队列进行排序 大概意思就是遍历10个队列 对每个队列里边的元素进行某种算法排序 这样每组都是有序的 整体又有序 最后肯定是一个有序的数组了 但是这样不符合基数排序的规则

综上 不是高位开始不行 而是浪费空间或者更复杂所以从底位开始确实比高位要好

2.为什么从低位开始对个位十位百位等等等排完序最后数组就有序了?

这个理解并不难需要自己好好的捋一捋 首先我对个位排完序 个位就是从小到大排列的 在此基础上对十位进行排序 注意是在此基础上在对上一位进行排序  如果十位相同 此时决定2个数顺序就是由个位决定了 而个位已经排好序了所以 此时十位相同的2个数顺序肯定就没错了 以此类推 最后数组肯定是排序正确的有序数组了 

如果从高位开始比较 大家肯定容易理解 高位一样的情况下在比较低位 这样肯定能得到一个有序的数组 从低位开始达到的效果其实是一样的 自己多想想

算法思想:

准备10个队列 因为不管哪一位都是从0到9的麻所以要准备10个队列  然后对位数不够的元素前边补0 假如 最大的数是3位 假如有个元素是4 那么就当004算 (补0只是为了方便演示 实际上算法是对当前位取余 假如4 对十位取余 就相当于 0.4%10 =0 )

先对个位进行排序 个位是0就放队列0中    个位是1就放队列1中  最后得到的是一个个位有序的数组

然后在对个位有序的数组进行十位排序 以此类推得到一个有序的数组

图片来源 https://www.cnblogs.com/l199616j/p/10738568.html

算法稳定性:

因为采用队列的思想 先进先出 所以相同元素的位置不会受影响所以 基数排序是稳定的 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值