内排序算法之 —— 基数排序

基数排序是一种常见的算法,虽然在各个数据结构教材中都能看到,但在面试或笔试中却很少遇到,本篇博客简要讲解基数排序的算法原理和效率。

基数排序不同于其他的排序算法,它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。多关键字排序中有两种方法:最高位优先法(MSD)和最低位优先法(LSD)。通常用于对数的排序选择的是最低位优先法,即先对最次位关键字进行排序,再对高一位的关键字进行排序,以此类推。

算法的思想类似于桶式排序,我们需要给待排序记录准备10个桶,为什么是10个?因为一个数的任何一位上,其数字大小都位于0~9之间,因此采用10个桶,桶的编号分别为0,1,2,3,4…9,对应待排序记录中每个数相应位的数值,基数排序也是因此而得名。我们先根据待排序记录的每个数的个位来决定让其加入哪个桶中。例如:待排序数组为:

278,109,63,930,589,184,505,269,8,83

求取每个数的个位数,依次为:8,9,3,0,9,4,5,9,8,3

依照其个位数决定将其加入哪个桶中:
这里写图片描述

此步骤即为教材中所说的分配,接下来就是要进行收集,依照桶的编号,将含有数据的桶中的数据依次取出,形成的新的数据记录为:

930,63,83,184,505,278,8,109,589,269

再对这个数组按照十分位进行分配进桶,收集,最后再按照百位进行分配进桶,收集。就可得到最终的排序结果。

基数排序算法的性能如下表所示:

时间复杂度空间复杂度稳定性复杂性
平均情况: O(d(n+r)) O(n+r) 稳定较复杂
最坏情况: O(d(n+r)) \\\
最好情况: O(d(n+r)) \\\

其中,d 为位数(最长位数),r 为基数(0 —— 9),n 为原数组个数。

从上表可以看出基数排序的时间效率与待排序数据序列的顺序无关。

基数排序的最大特点是不需要进行关键字的比较,算法中所产生的有序区不一定是全局有序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值