八大排序算法~基数排序(桶排序)
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;   //控制n的10倍数,以获取“模数”
        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++;
     }
}
    
作者:一乐乐
    
    
    










