java全家桶

插入排序

2019-04-28  本文已影响0人  趁年轻多奋斗
public static void main(String[] args) {
    int[] arr = new int[]{5, 45, 87, 32, 9, 7, 159, 324, 4, 107, 69,58};
    Main.base(arr);
    System.out.println(Arrays.toString(arr));
}

private static void base(int[] arr) {
    int max = Integer.MIN_VALUE;
    for (int i = 0; i < arr.length; i++) {
        if (max < arr[i]) {
            max = arr[i];
        }
    }
    //计算最大数字是几位数
    int count = (max + "").length();
    //用来临时存放数据的数组
    int[][] temp = new int[10][arr.length];
    //用于记录在temp中相应的数组中存放数字的数量
    int[] counts = new int[10];
    //根据最长长度的数决定比较次数
    for (int j = 0, n = 1; j < count; j++,n *= 10) {
        //把每个数字分别计算余数
        for (int d = 0;d<arr.length;d++){
            //计算余数
            int yu = arr[d]/n%10;
            //把当前遍历的数字存放在指定位置的数组中
            temp[yu][counts[yu]] = arr[d];
            //记录数字
            counts[yu]++;
        }
        //记录取出元素要放在原数组的位置
        int  index = 0;
        //把数组从二维数组取出来
        for (int k = 0;k<counts.length;k++){
            //判断记录的数组是否有记录
            if (counts[k]!=0){
                //若有 则以记录该数组下标对应值为当前位数的数量
                for (int l =0;l<counts[k];l++){
                    //取出元素
                    arr[index]=temp[k][l];
                    //移动下标
                    index++;
                }
                //遍历完,清空,下个位数记录需要
                counts[k]=0;
            }
        }

    }
}
上一篇下一篇

猜你喜欢

热点阅读