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

    桶排序的介绍

    ​        桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响

    桶排序的原理

    ​        1、设置一个定量的数组当作空桶;    
    ​        2、遍历输入数据,并且把数据一个一个放到对应的桶里去;
    ​        3、对每个不是空的桶进行排序;
    ​        4、从不是空的桶里把排好序的数据拼接起来

    图演示


    代码演示

    /**
         * 桶排序
         * 
         * @param array
         * @param bucketSize
         * @return
         */
        public static ArrayList<Integer> BucketSort(ArrayList<Integer> array, int bucketSize) {
            if (array == null || array.size() < 2)
                return array;
            int max = array.get(0), min = array.get(0);
            // 找到最大值最小值
            for (int i = 0; i < array.size(); i++) {
                if (array.get(i) > max)
                    max = array.get(i);
                if (array.get(i) < min)
                    min = array.get(i);
            }
            int bucketCount = (max - min) / bucketSize + 1;
            ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketCount);
            ArrayList<Integer> resultArr = new ArrayList<>();
            for (int i = 0; i < bucketCount; i++) {
                bucketArr.add(new ArrayList<Integer>());
            }
            for (int i = 0; i < array.size(); i++) {
                bucketArr.get((array.get(i) - min) / bucketSize).add(array.get(i));
            }
            for (int i = 0; i < bucketCount; i++) {
                if (bucketSize == 1) { 
                    for (int j = 0; j < bucketArr.get(i).size(); j++)
                        resultArr.add(bucketArr.get(i).get(j));
                } else {
                    if (bucketCount == 1)
                        bucketSize--;
                    ArrayList<Integer> temp = BucketSort(bucketArr.get(i), bucketSize);
                    for (int j = 0; j < temp.size(); j++)
                        resultArr.add(temp.get(j));
                }
            }
            return resultArr;
        }
    不积跬步,无以至千里;不积小流,无以成江海
  • 相关阅读:
    PhoneGap在Mac环境下使用问题小结
    HTML5跨平台开发环境配置
    Delphi编写下载程序:UrlDownloadToFile的进度提示
    DELPHI中调用XSD去验证XML的合法性
    防止Form中嵌入WebBrowser出错导致程序崩溃
    Dynamics CRM:“the given key was not present in the dictionary”
    Dynamics CRM 2016 + Visual studio 2015 开发环境搭建
    IIS Recycling设定
    Dynamics CRM和数据挖掘
    客户才是关键
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15790427.html
Copyright © 2011-2022 走看看