Java实现算法 java实现基数排序 RadixSort

其实就是个十百千万位...每位数去计数排序 建议先看计数排序

public class RadixSort {
    public static void main(String[] args) {
        int[] arr = {123, 15, 99, 85, 8888, 0, 0, 99};
        int n = arr.length;
        radixSort(arr, n);
        print(arr, n);
    }

    private static void radixSort(int[] arr, int n) {

        int m = getMax(arr, n);
        //通过最大值可得最大值位数 然后循环个,十,百,千,万....  exp=1,10,100,1000,10000.....
        for (int exp = 1; m / exp > 0; exp *= 10) {
            countSort(arr, n, exp);
        }
    }

    //获取数组中最大的int
    private static int getMax(int[] arr, int n) {
        int mx = arr[0];
        for (int i = 1; i < n; i++)
            if (arr[i] > mx) {
                mx = arr[i];
            }
        return mx;
    }

    private static void countSort(int[] arr, int n, int exp) {
        int[] output = new int[n];
        int i;
        int[] count = new int[10];

        //Arrays.fill数组填充 将count数组中全部填充int 0
        Arrays.fill(count, 0);

        //exp 1,10,100,100...代表个十位百位千位
        //n=arr.length
        //count[] 取商余数计数 例count[7] 为余数为7的 在arr[]中的次数
        //count[] 其实就是将exp代表的个位十位百位千位 计数排序
        for (i = 0; i < n; i++) {
            count[(arr[i] / exp) % 10]++;
        }

        for (i = 1; i < 10; i++) {
            count[i] += count[i - 1];
        }

        for (i = n - 1; i >= 0; i--) {
            output[count[(arr[i] / exp) % 10] - 1] = arr[i];
            count[(arr[i] / exp) % 10]--;
        }

        for (i = 0; i < n; i++) {
            arr[i] = output[i];
        }
    }

    //打印
    static void print(int[] arr, int n) {
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }

}

 

这个算法学习的参考地址 :D  github

 

顺颂时祺

你可能感兴趣的:(算法,java,排序算法,算法,快速排序)