美文网首页
Android 算法之排序算法(基数排序)

Android 算法之排序算法(基数排序)

作者: Kevin_小飞象 | 来源:发表于2021-08-05 09:10 被阅读0次

基数排序

基数排序(Radix Sort)是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。

算法描述

  • 取得数组中的最大数,并取得位数;
  • arr 为原始数组,从最低位开始取每个位组成 radix 数组;
  • 对 radix 进行计数排序(利用计数排序适用于小范围数的特点);

动图演示

06.gif

实例

  1. 代码实现
public class RadixTest {
    public static void main(String[] args) {
        int[] a = {13,25,1111,232,4454,79,86,98,61,447};
        System.out.println("初始值:");
        printArray(a);
        a= sort(a);
        System.out.println("\n排序后:");
        printArray(a);
    }
    
    public static int[] sort(int[] data) {
        int maxLength = getMaxLength(data);
        int[] temp = baseSort(data,0,maxLength);
        return temp;
    }
    
    private static int[] baseSort(int[] data,int i,int maxLength) {
        if(i >= maxLength) {
            return data;
        }
        
        int len = data.length;
        
        int[] count = new int[10];
        
        int[] temp = new int[len];
        
        for (int j = 0;j < temp.length;j++) {
            count[getNum(data[j],i)]++;
        } 
        
        for (int m = 1;m < count.length;m++) {
            count[m] = count[m - 1] + count[m];
        } 
        
        for(int n = temp.length - 1;n >= 0;n--) {
            int number = data[n];
            int a = getNum(number,i);
            temp[count[a] - 1] = number;
            count[a]--;
        }
        
        return baseSort(temp, i+1, maxLength);
    }
    
    /**
    * 获取一个数字第i位得数字,个位从0开始
    */
    private static int getNum(int num,int i) {
        for(int j = 0;j < i + 1;j++) {
            if (j == i) {
                num %= 10;
            } else {
                num /= 10;
            }
        }
        
        return num;
    }
    
    private static int getMaxLength(int[] a) {
        int maxLength = 0;
        for (int i = 0;i < a.length;i++) {
            if(maxLength < length(a[i])) {
                maxLength = length(a[i]);
            }
           
        } 
        
        return maxLength;
    }
    
    /**
    * 获取数组的长度
    */
    private static int length(int num) {
        return String.valueOf(num).length();
    }
    
    private static void printArray(int[] a) {
        for (int i = 0;i < a.length;i++) {
            System.out.print(a[i] + " ");
        } 
        System.out.println();
    }
}
  1. 输出结果


    05.png

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • 非比较排序算法

    基数排序算法 基数排序是非比较排序算法,算法的时间复杂度是O(n). 相比于快速排序的O(nlgn),从表面上看具...

  • Android 算法之排序算法(基数排序)

    基数排序 基数排序(Radix Sort)是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最...

  • swift经典算法-基数排序

    基数排序算法 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子...

  • 排序算法(十二)基数排序

    排序算法(十二)基数排序   基数排序(radix sort)是桶排序改进版,该算法是通过按位收集的思想,即将一个...

  • 算法04-棋牌游戏常用排序算法

    算法04-棋牌游戏常用排序算法 一、介绍 棋牌游戏常用排序算法包括:链式基数排序、插入排序、希尔排序。 二、链式基...

  • 线性排序

    一、线性排序算法介绍 线性排序算法包括桶排序、计数排序、基数排序。 线性排序算法的时间复杂度为O(n)。 此3种排...

  • 桶排序、计数排序、基数排序

    一、线性排序算法介绍 线性排序算法包括桶排序、计数排序、基数排序。 线性排序算法的时间复杂度为O(n)。 此3种排...

网友评论

      本文标题:Android 算法之排序算法(基数排序)

      本文链接:https://www.haomeiwen.com/subject/mlbqvltx.html