八大排序算法~基数排序(桶排序)

1,思路:分配+收集:

将关键字为k的记录放到第k个桶~分配!【关键字~就是待排数的位数

按序号将非空的桶中数据进行连接~收集!

待排数据要从小到大进行排序~~ 个位数开始从小到大排序~按照个位数将待排数据装到对应的桶号里;

                                        ~~ 十位数开始从小到大排序~按照十位数将待排数据装到对应的桶号里;

                ~~ 百位数开始从小到大排序~按照百位数将待排数据装到对应的桶号里;

2,图解:

 第一趟排序后结果: (790,611,101,532,214,735,945,486,306

 第二趟排序后结果: (101,306,611,214,735,532,945,486,790

 

 第三趟排序后结果: (101,214,306,486,532,611,735,790,945

3,代码:

 public static void sort(int[] number, int d){   //d 表示最大数的位数
        int k = 0;
        int n = 1;
        int m = 1;  //控制键值排序依据的是哪一位
        int[][] temp = new int[10][number.length];//数组的第一维表示余数的可能范围是0-9
        int[] order = new int[10]; //表示当前某个桶中的个数
        while(m <= d){
            for(int i = 0; i < number.length; i++){
                int lsd = ((number[i] / n) % 10);
                temp[lsd][order[lsd]] = number[i];
                order[lsd]++;
            }
            //根据经过“个位排序(或者是十位排序或百位排序)”桶中装的数拷贝到number中
            for(int i = 0; i < 10; i++){
                if(order[i] != 0){
                    for(int j = 0; j < order[i]; j++){
                        number[k] = temp[i][j];
                        k++;
                    }
                    order[i] = 0;
                }
                n *= 10;
                k = 0;
                m++;
            }
        }
    }

 

 

 

 

 

 

版权声明:本文为shan333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shan333/p/15059521.html