多关键字及基数排序思想

基数排序是一种借助多关键字排序的思想来实现单关键字排序的内部排序算法。


1.多关键字排序

举个例子:要比较三个家族哪个更厉害,你决定通过官职来比较三代来确定.

赵家 爷爷:县长(3)爸爸:村长(2)儿子:省长(5)

孙家 爷爷:市长(4)爸爸:镇长(2)儿子:主席(6)

田家 爷爷:省长(5)爸爸:市长(4)儿子:村长(1)


要比较厉害,最先看的就是当代,爷爷再厉害也退休了,只是以前当的官,爸爸厉害上升的空间也很小了.而儿子潜力大空间大.所以相比之下儿子比爸爸的影响力大,爸爸比爷爷的影响力大.换个高端的词就是:权重.

在这个例子中:

儿子是:主关键字(K0)爸爸是:次关键字(K1)爷爷是:最次关键字(K2)

儿子的权重>爸爸的权重>爷爷的权重


1.最高位优先MSD(本例中:从儿子开始比,到爷爷结束)

先对K0进行排序,并按K0的不同值将记录序列分成若干子序列之后,分别对K1进行排序,......,依次类推,直至最后对最次位关键字排序完成为止。

2.最低位优先LSD(本例中:从爷爷开始比,到儿子结束)

先对Kd-1进行排序,然后对Kd-2进行排序,依次类推,直至对最主位关键字K0排序完成为止。

2.基数排序

基数排序又称为桶子法,它是根据排列元素的关键字,将元素分配至对应的,藉此达到排序的目的.

就比如说:

当当网现有一堆书籍快递需要我们帮他排出它们的派送时间排行.假设我们根据收货地点距发货地址距离将依次将省,,区划分为0-9十个级别,级别越高路程越远,到货时间越长.例如:陕西省(9)西安市(9)长安区(9),则这件快递所有当中路途最远,到货最慢的.

快递级别如下:

AAA654,BBB789,CCC091,DDD432,EEE567,FFF674,GGG093,HHH509

LSD(见上文)排序为例:

LSD的基数排序适用于位数较小的数列排序,如果位数多的话,使用MSD效率会比较好.接下来我们再来看看LSD

同样背景以下述数据为例:

快递级别如下:

AAA6()5()4(),BBB789,CCC091,DDD432,EEE569,FFF674,GGG093,HHH509,III568

MSD排序(以省级别为5为例):



MSD基数排序是通过”桶中建桶”的方式实现自前向后的”收集,排序”,先利用权重高的关键字(省级别)将排序元素放置大桶中(第一次),再在各个桶中放入小桶(第二次),再利用次关键字进行元素”入桶”,如此往复.最后再从最深桶中依次取出,元素便已排好次序.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值