基数排序

基数排序是一种有趣的算法,有一点逆向思维的冲突在里面。下面举一个例子:

如果要对5个3位整数进行排序,你会怎么做?我猜想大多数人会这样做(根据我们学习过的的数学中的一些概念惯性):

123  123  123 

343  135  135

362  241  241

241  343  343

135  362  362


先对高位进行排序,然后对高位相同的,次高位进行排序,一直进行到低位。

基数排序进行排序的方向和我们通常思考的方向相反,也就是说从低位开始往高位排序,为什么也能得到正确的结果呢?

这里用到了数学里的归纳法,或者说是计算机科学里的递推法,由于这是一个递归的过程,试想对低1位排好序之后,低1位是有序的,

接着对第2位进行排序,排好了之后分成两种情况来考虑,那些严格递增的低2位数的排序是正确的,原因理所当然,那么那些非严格递增,在这里也就是相等的第2位的低2位数的大小是由低1位决定的,如果不改变相等元素的相对的位置的话,实际情况也是的,那么相等的第2位的低2位数值也是有序,这样整个都是有序的,这种思考可以递推到多位数的情况,所以从低位到高位的排序算法是正确的。

 

从以上的论述中可以看出,对每一位进行排序,需要选择一个稳定的排序算法,这里的稳定是指,排序key相等的时候,保持其原先的前后关系。

 

基数排序可以应用到其他的多字段排序的问题当中,为什么呢?很容易想这里的字段相当于一个数字位,可以很容易的映射到一个字段,任何可以用来排序的对象。

posted on 2012-05-03 11:58  涅槃火凤  阅读(209)  评论(0编辑  收藏  举报

导航