2018-04-11 基数排序—次位优先

2018-04-11  本文已影响0人  laohan_王

次位优先我的理解实际上是一种思想,就是基于要排序的数据,根据其位数进行排序,比如32,42,156,那就是先把这几个数的个位比较一下,排一轮,然后十位数比一下,排一轮,以此类推。

次位优先—数据源.png

图中红框部分就是数据源,根据数据源的数量,先做出相应的10个桶,已用做桶排序。


.png

从这儿可以看出,第一轮创建了Length为10的数组,然后根据数据源中的个位数,进行了一轮排序。


从这儿又可以看出来,我们根据上一轮个位数的排序结果又进行了十位数的一轮排序,现在看来数据上已经有些大不同了,那么先把这些数据做成一个链表或者数组以备下一轮排序用。


次位优先—百位数.png

最后一步看到百位数上,0,1,8,27.......
这样把结果顺序放到数组里以后,就已经是一个排好序的数组了。

在这个基数排序里,浙大的课程举了个很好的例子,扑克牌。


基数排序—扑克牌.png

可以看到一副扑克牌,一般是按照两种关键字(原则)排序的,花色和面值。那么这种时候可以怎么做呢


次位优先—扑克牌2.png

看到这儿就可以理解了,你看,手牌如果是13张牌,那我们先创建13个桶,进行一番次位优先排序,按照面值先将他们排好序。
然后再建造4个花色的桶。再根据花色把上一轮面值排序的结果放进去,很自然的手牌就是排序好的结果。

上一篇 下一篇

猜你喜欢

热点阅读