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


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

    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++; } }

     

  • 相关阅读:
    union
    大端和小端
    迭代器
    STL
    动态内存管理2
    动态内存管理
    关于 FlexBox
    CSS的居中问题
    操作符
    JavaScript介绍
  • 原文地址:https://www.cnblogs.com/shan333/p/15059521.html
Copyright © 2020-2023  润新知