算法思路:比较数量级,从个位比较到这组数中数量级最高的级数。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/17989522-514f-4b58-b55c-304342e95384/849589-20171015232453668-1397662527.gif

package top.ltyzqhh.Annotation;

import java.util.Arrays;

public class RedixSort {
    public static void main(String[] args) {
        int[] a={1324,234,532,1313,1,3,553};
        System.out.println(Arrays.toString(a));
        redixSort(a);
        System.out.println(Arrays.toString(a));
    }

    public static  void redixSort(int[] array){
        int[][] bucket=new int[10][array.length-1];//桶里面所存的具体数值
        int[] bucketElementCouonts = new int[10];//每个桶所存的元素个数
        int max= array[0];
        //求出最大的数
        for (int i = 0; i <array.length ; i++) {
            if (max<array[i]) max=array[i];
        }
        int maxCount=(max+"").length();//最大位数
        for (int i = 0; i <maxCount ; i++) {
            //把数组中的数都放在桶里
            for (int j = 0; j <array.length ; j++) {
                int value =array[j]/(int) Math.pow(10,i)%10;
                bucket[value][bucketElementCouonts[value]]=array[j];
                bucketElementCouonts[value]++;
            }
            int index=0;
            for (int j = 0; j <bucketElementCouonts.length ; j++) {//遍历每个桶
                if (bucketElementCouonts[j]!=0){
                    for (int k = 0; k <bucketElementCouonts[j] ; k++) {//遍历每个桶的元素
                        array[index]=bucket[j][k];
                        index++;
                    }
                }
                bucketElementCouonts[j]=0;//清空桶,便于后面排序
            }
        }
    }
}