数据结构之基数排序

基数排序是一种分配式排序,利用每个数位进行排序,通过桶分配实现。文章介绍了最高位优先(MSD)和最低位优先(LSD)两种方法,详细阐述了基数排序的原理和步骤,并提供了代码实现。
摘要由CSDN通过智能技术生成

基数排序

基数排序是一种“分配式排序”。它将整数各个位进行切割,按位排序。
基数排序会使用到桶 (Bucket),通过将要比较的位(个位、十位、百位…),将要排序的元素分配至 0~9 个桶中,借以达到排序的作用,在某些时候,基数排序法的效率高于其它的比较性排序法。

实现方法

**最高位优先(Most Significant Digit first)法,简称MSD法:**先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最后一位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。
**最低位优先(Least Significant Digit first)法,简称LSD法:**先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。

实现原理

基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine)上的贡献。它是这样实现的:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
基数排序的方式可以采用LSD(Least significant digital)或MSD(Most significant digital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。

算法步骤

  1. 以LSD为例,首先根据个位数的数值,在遍历数组时将元素分配至编号0到9的桶子中;
  2. 接下来将这些桶子中的数值重新串接起来(按照先进先出的原则),排列成新的序列;接着再进行一次分配,这次是根据十位数来分配;
  3. 直到从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

代码实现

var counter = [];
function radixSort(arr,maxDigit){
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值