zoukankan      html  css  js  c++  java
  • 排序算法-桶排序(Java)

    package com.rao.sort;
    
    import java.util.*;
    
    /**
     * @author Srao
     * @className BucketSort
     * @date 2019/12/10 17:42
     * @package com.rao.sort
     * @Description 桶排序
     */
    public class BucketSort {
    
        /**
         * 桶排序
         * @param arr
         * @return
         */
        public static double[] bucketSort(double[] arr){
            //1.计算出最大值和最小值,求出两者的差值
            double min = arr[0];
            double max = arr[0];
            for (int i = 1; i < arr.length; i++) {
                if (max < arr[i]){
                    max = arr[i];
                }
                if (arr[i] < min){
                    min = arr[i];
                }
            }
            double d = max - min;
    
            //2.初始化桶
            int bucketNum = arr.length;
            List<LinkedList<Double>> bucketList = new ArrayList<>(bucketNum);
            for (int i = 0; i < bucketNum; i++) {
                bucketList.add(new LinkedList<>());
            }
    
            //3.遍历数组中的元素,把所有元素都放入对应的桶当中
            for (int i = 0; i < arr.length; i++) {
                //计算当前元素应该放在哪个桶里面
                int num = (int)((arr[i] - min) / (d / (bucketNum - 1)));
                bucketList.get(num).add(arr[i]);
            }
    
            //4.对每个桶里面的元素进行排序
            for (int i = 0; i < bucketNum; i++) {
                Collections.sort(bucketList.get(i));
            }
    
            //5.输出全部元素
            int k = 0;
            for(LinkedList<Double> doubles : bucketList){
                for (Double aDouble : doubles) {
                    arr[k] = aDouble;
                    k++;
                }
            }
    
            return arr;
        }
    
        public static void main(String[] args) {
            double[] arr = new double[]{4.12, 6.421, 0.0023, 3.0, 2.123, 8.122, 4.12, 10.09};
            System.out.println(Arrays.toString(arr));
            arr = bucketSort(arr);
            System.out.println(Arrays.toString(arr));
        }
    }

      桶排序可以看作是对计数排序的改进,计数排序对于数值在一定范围的整数数组可以进行排序,但是对于小数的数组却没有办法计数,这时候就要用到桶排序。

      桶排序是将数组中的数划分到不同的区间,再对每个桶中的数进行排序,这时用的排序算法一般为快速排序或者归并排序,然后再把所有桶中的数返回给原数组。

  • 相关阅读:
    python——numpy模块
    python——xlrd、xlwt、xlutils模块
    python——json&pickle模块
    python——sys模块
    python——os模块
    python——random模块
    python——time模块
    linux命令 pwd
    linux 里面ls命令!!
    校花网图片爬取
  • 原文地址:https://www.cnblogs.com/rao11/p/12018237.html
Copyright © 2011-2022 走看看