zoukankan      html  css  js  c++  java
  • 排序之桶排序

    /**
    *
    * @author Mr.Du
    *
    * Date:2019-02-27
    *
    *
    * 桶排序:桶排序中的桶是什么概念呢?每一个桶代表一个区间范围,里面可以承载一个或多个元素。
    * 第一步就是创建这些桶,确定每一个桶的区间范围,具体建立多少个桶如何确定它的区间范围,有很多方法
    * 我们这里创建的桶数量等于原始数列的元素数量,除了最后一个桶只包含数组最大值,前面各个桶的区间按
    * 比例确定,区间跨度 = (最大值 - 最小值)/(桶的数量 - 1).
    * 第二步:遍历原始数组,把元素对号入座放入各个桶中
    * 第三步:每个桶内的元素分别排序
    * 第四步:遍历所有的桶,输出所有元素
    */

    public static double[] bucket_Sort(double[] arr) {
            double max = arr[0];
            double min = arr[0];
            //确定最大最小值
            for(double i:arr) {
                if(i<min) min = i;
                if(i>max) max = i;
            }
            double d = max - min;
            //初始化桶,定义一个LinkList集合表示桶,ArrayList用来接收所有桶
            int len = arr.length;
            ArrayList<LinkedList<Double>> arraylist = new ArrayList<LinkedList<Double>>();
            for(int i = 0;i<len;i++) {
                arraylist.add(new LinkedList<Double>());
            }
            //遍历原始数组,将元素放入桶中
            for(int i = 0;i<arr.length;i++) {
                int tmp = (int) ((arr[i] - min) * (len - 1) / d);
                arraylist.get(tmp).add(arr[i]);
            }
            //对每一个桶中元素进行排序
            for(int i = 0;i<arraylist.size();i++) {
                Collections.sort(arraylist.get(i));
            }
            //输出全部元素
            double[] newarr = new double[arr.length];
            int index = 0;
            for(LinkedList<Double> list:arraylist) {
                for(double i : list) 
                    newarr[index++] = i;
            }
            return newarr;
        }
  • 相关阅读:
    题解:luoguP1861 星之器
    题解:LOJ540游戏
    Yii框架常见问题
    常用ubuntu命令
    Python中的映射数据类型 dict
    Python中的编码问题:ASCII码 Unicoden编码 UTF8编码
    Python中的列表、元组的增、删、改、查
    Python 数据类型之 集合 set
    Python中常见的字符串的操作方法:
    Python程序的控制结构用多分支结构处理身体指标BMI问题
  • 原文地址:https://www.cnblogs.com/du001011/p/10448109.html
Copyright © 2011-2022 走看看