zoukankan      html  css  js  c++  java
  • java -算法

    桶排序是拿空间换时间,在数量特别大,桶很多的时候速度比快速排序还要快一些。(但是如果数量过百万可能会内存溢出(数组太长))

    设置10个数组(代表0-9号桶)

    先按从个位一次放入对应桶中,然后依次取出放回数组。

    然后按十位。。。

    百位。。。

    。。。

    直到最高位都为0.

    123,125,214,243,222

    第一次(个位):

    2: 222

    3:123,243

    4:214

    5:125

    然后取出: 222,123,243,214,125

    第二次(10位)

    1:214

    2:222,123,125

    4:243

    然后取出:214,222,123,125,243

    第3次(100位)

    1:123,125

    2:214,222,243

    然后取出:123,125,214,222,243

    没有1000位,所以排序结束

    其实本质就是按位比较。

     //桶排序
        public void bucketSort(int[] a) {
    
    
            //先要得到最大的位数,判断循环多少次
            int max = a[0];
            for (int i = 0; i < a.length; i++) {
                if (max < a[i]) {
                    max = a[i];
                }
            }
            //此时max就是最大值
            int maxlength = ("" + max).length(); //先把max变成字符串然后取长度,得到位数
    
            int n = 1;  //被除数 第一次是1,第二次是10(这样比如1212/10 = 121 ,然后再对10取余,得到10位的1),第三次是100 ..
            for (int k = 0; k < maxlength; k++, n = n*10) {//每次被除数 * 10
                int[][] bucket = new int[10][a.length];  //10个桶
                int[] b_max = new int[10];             //记录10个桶内数据的数量方便插入 java的int型默认值是0,所以不赋值也能用.
                for (int j = 0; j < a.length; j++) {
                    int num = (a[j] / n % 10); //用取余得到当前位 ps: % 和 / 优先级一样,所以错左向右计算
                    bucket[num][b_max[num]] = a[j];
                    b_max[num]++;
                }
    
                //放完桶后,取出回装
                int a_max = 0; //用来往a回存
                for (int i = 0; i < 10; i++) { //遍历10个桶
                    for (int j = 0; j < b_max[i]; j++) { //遍历其中第i个桶
                        a[a_max] = bucket[i][j];
                        a_max++;
                    }
                }
            }
            //循环完毕后,a中的数值已经是排序好的了。
    
        }
  • 相关阅读:
    学生免费注册Pycharm
    CSS笔记
    加载CIFAR数据集时报错的大坑
    发布小程序
    微信中的动图如果发朋友圈
    安卓第一个小项目
    转换小写字母
    1小时搞定vuepress快速制作vue文档/博客+免费部署预览
    干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)
    JavaScript 加减危机——为什么会出现这样的结果?
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11852406.html
Copyright © 2011-2022 走看看