基数排序 RadixSort 算法分析

来源:互联网 发布:安徽幻维网络是培训吗 编辑:程序博客网 时间:2024/06/06 06:57

前面已经介绍了几种排序:

分治排序:http://blog.csdn.net/wolinxuebin/article/details/7380455

堆排序   :http://blog.csdn.net/wolinxuebin/article/details/7388858

快速排序:http://blog.csdn.net/wolinxuebin/article/details/7456330

随机快速排序:http://blog.csdn.net/wolinxuebin/article/details/7456595

 

下面介绍基数排序:

    为什么要基数排序,或者基数排序有什么好处?

    基数排序最大的特点就是稳定性,简单的说,如果有两个数都为11,姑且前面一个标为11(1),后者为11(2),最后排序之后,11(1)始终在11(2)前面,这个特点是基数排序的重要点。

    基数排序是从老式穿卡机(现在没有了,不解释了)上衍生出来的,主要思想如下图1:

图1 基数排序示意图

    有些细节要解释下,一、此处你看到的数字不在是完整的数字,而是由多个关键字组成的数字,所以是按照关键字排序,先顺如相应的“桶”空间,再顺序出来,此处的桶理解为队列,先进先出。

    二、为什么从“最小”位的关键字开始排,上面大家都已经看到了,如果不不相信,从第一位开始拍,看看最终结果完全相反。为什么呢?这里我理解为,第一位是最大关键字,第三位为最小关键字,优先级为第一位>第二位>第三位,由此可知就是说,优先级高的关键字可以打破优先级低的关键字已经排好的顺序。

    三、时间复杂度,设有n个d位数,每位数有k种(如0~6,有7种可能,k为7)可能,每个关键字时间复杂度为o(n+k),n很好理解,k呢?其实k就是在分配完后,将各自的桶组在一起,共有k中取值,k种桶。所以总的时间复杂度为o(d*(k+n))。

    具体代码就不给了,这个有点简单。

原创粉丝点击