java實現基數排序

參考文章:https://www.jianshu.com/p/cc607d631b5e

 

import java.util.Arrays;

public class RadixSort2 {
    private static int BASE_NUM = 10;

    private static int getMax(int[] data){
        int maxIndex = 0;
        int length = data.length;
        for(int i=0; i<length; i++){
            if(data[i]<0){
                throw new RuntimeException("data is less than 0");
            }
            if(data[maxIndex] < data[i]){
                maxIndex = i;
            }
        }
        return data[maxIndex];
    }

    private static void clearArr(int[] data){
        Arrays.fill(data, 0);
    }

    public static void radixSort2(int[] data){
        int max = getMax(data);
        int length = data.length;
        int[] countArr = new int[BASE_NUM];
        int[][] sortedArr = new int[BASE_NUM][length];
        int index = 0, k=1;
        while(max>k){
            for(int i=0; i<length; i++){
                int remainder = data[i] / k % 10;
                sortedArr[remainder][countArr[remainder]] = data[i];
                countArr[remainder]++;
            }
            for(int i=0; i<BASE_NUM; i++){
                for(int num =0; num < countArr[i]; num++){
                    data[index++] = sortedArr[i][num];
                }
            }
            clearArr(countArr);
            index = 0;
            k *= 10;
        }
    }
}

 

發佈了39 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章