排序算法总结(9)--基数排序

原创 2017年05月23日 18:19:17

一、简介

基数排序不是比较排序,依赖于计数排序。假设待排序序列中最大数字有d位数字,基数排序首先将所有元素拆分成d个关键字,每个关键字是元素的每位上的数字,例如257,拆分成3个关键字,2,5,7,如果位数不够,用0补全。对每一位的关键字进行计数排序。
排序时有两种解决方案:
最高位优先法(MSD)(Most Significant Digit first)
最低位优先法(LSD)(Least Significant Digit first)
这里以LSD为例。

二、伪代码

radixSort(A,radix,d)
    //A是待排序数组,radix是容器个数,d是数字位数
    for i=1 to d
        对第i位数字进行计数排序

三、代码实现

public static void radixSort(int[] A,int radix,int d){
        //给一个缓存数组
        int [] temp=new int[A.length];
        //给出容器数组
        int [] buckets=new int[radix];
        //对每位关键字进行计数排序
        int rate=1;
        for(int i=0;i<=d;i++){
            //将A中元素复制到temp中
            System.arraycopy(A, 0, temp, 0, A.length);
            //重新初始化buckets
            Arrays.fill(buckets,0);

            int subKey;
            //计算第i位关键字并统计
            for(int j=0;j<A.length;j++){
                subKey = (temp[j] / rate) % radix;  
                buckets[subKey]++; 
            }

            for(int j=1;j<radix;j++){
                buckets[j]=buckets[j]+buckets[j-1];
            }
            for (int m =A.length - 1; m >= 0; m--) {  
                subKey = (temp[m] / rate) % radix;  
                A[--buckets[subKey]] = temp[m];  
            }  
            rate *= radix;  
        }
    }

四、注意事项

1、当d比较大时,使用MSD效率更高
2、基数排序的基础是计数排序,因为计数排序是稳定的。
3、对每个关键字进行计数排序的时间复杂度是O(n+k),所以基数排序的时间复杂度是O(d(n+k))。
4、MSD基数排序是从最高位开始对序列进行分组,到最低位为止。但是其实现过程是和LSD基数排序不同的,排序过程中需要用到递归函数。首先统计所有元素最高位的关键字,如果某个关键字的个数大于1,需要对这些关键字所在的元素递归的统计下一位关键字,直到所有关键字的个数小于等于1,回溯收集数据。

相关文章推荐

基数排序算法 java实现

  • 2012年02月20日 15:54
  • 32KB
  • 下载

基数排序算法

  • 2014年08月16日 11:17
  • 736B
  • 下载

排序算法总结(二)基数排序

前文介绍过计数排序,虽然其时间复杂度为O(n),但是其辅助空间需求较大,对于一个待排序正数数组A其所需辅助空间为max(A),当A中数值较大时辅助空间难以接受。下面介绍一种在计数排序基础之上改进的排序...

一种新的高校基数排序算法

  • 2011年05月23日 15:42
  • 158KB
  • 下载

常用排序算法总结8一一基数排序

基数排序(英语:Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排...

基数排序算法

  • 2013年10月27日 10:01
  • 5KB
  • 下载

Radix Sort (基数排序)排序算法

  • 2008年12月29日 14:39
  • 174KB
  • 下载

排序算法总结之基数排序 Radix sort

算法原理: 基数排序是基于非比较的的整数排序算法。它采用分治的思想进行排序,与快速排序和归并排序在数组级别的分治思想不同,基数排序基于元素级别的分治。即从元素的最低位个位开始排序,然后依次排十位,百位...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法总结(9)--基数排序
举报原因:
原因补充:

(最多只允许输入30个字)