次位优先我的理解实际上是一种思想,就是基于要排序的数据,根据其位数进行排序,比如32,42,156,那就是先把这几个数的个位比较一下,排一轮,然后十位数比一下,排一轮,以此类推。
![](https://img.haomeiwen.com/i11398331/40458ab723181c2a.png)
图中红框部分就是数据源,根据数据源的数量,先做出相应的10个桶,已用做桶排序。
![](https://img.haomeiwen.com/i11398331/02380e72d374876f.png)
从这儿可以看出,第一轮创建了Length为10的数组,然后根据数据源中的个位数,进行了一轮排序。
![](https://img.haomeiwen.com/i11398331/b3282b65937c689c.png)
从这儿又可以看出来,我们根据上一轮个位数的排序结果又进行了十位数的一轮排序,现在看来数据上已经有些大不同了,那么先把这些数据做成一个链表或者数组以备下一轮排序用。
![](https://img.haomeiwen.com/i11398331/e1ed535b0881d6e2.png)
最后一步看到百位数上,0,1,8,27.......
这样把结果顺序放到数组里以后,就已经是一个排好序的数组了。
在这个基数排序里,浙大的课程举了个很好的例子,扑克牌。
![](https://img.haomeiwen.com/i11398331/619f130c8b118345.png)
可以看到一副扑克牌,一般是按照两种关键字(原则)排序的,花色和面值。那么这种时候可以怎么做呢
![](https://img.haomeiwen.com/i11398331/c70ae105af526ae8.png)
看到这儿就可以理解了,你看,手牌如果是13张牌,那我们先创建13个桶,进行一番次位优先排序,按照面值先将他们排好序。
然后再建造4个花色的桶。再根据花色把上一轮面值排序的结果放进去,很自然的手牌就是排序好的结果。
网友评论