桶排序

桶排序的基本思想:它就是把数组arr[]划分为N个大小相同的子区间(桶),每个子区间各自排序,最后合并。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。

步骤:

  1.找出待排序数组中的最大值max、最小值min;

  2.我们使用动态数组arraylist作为桶,桶里放的元素也用arraylist存储。桶的数量为(max-min)/arr.length+1;

  3.遍历数组arr,计算每个元素arr[i]放的桶;

  4.每个桶各自排序

算法实现:

 1 public static void bucketSort(int[] arr){
 2     int max = Integer.MIN_VALUE;
 3     int min = Integer.MAX_VALUE;
 4     for(int i = 0; i < arr.length; i++){
 5         max = Math.max(max, arr[i]);
 6         min = Math.min(min, arr[i]);
 7     }
 8     //创建桶
 9     int bucketNum = (max - min) / arr.length + 1;
10     ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum);
11     for(int i = 0; i < bucketNum; i++){
12         bucketArr.add(new ArrayList<Integer>());
13     }
14     //将每个元素放入桶
15     for(int i = 0; i < arr.length; i++){
16         int num = (arr[i] - min) / (arr.length);
17         bucketArr.get(num).add(arr[i]);
18     }
19     //对每个桶进行排序
20     for(int i = 0; i < bucketArr.size(); i++){
21         Collections.sort(bucketArr.get(i));
22     }
23 }
posted @ 2019-10-28 15:12  MrHH  阅读(244)  评论(0编辑  收藏  举报