2021-03-08 排序算法之桶排序

思路

网上一张比较清楚的图


image.png
  1. 创建桶。
  2. 将元素放入桶。(桶之间是有序的)
  3. 对桶内元素进行排序。

桶的划分和桶内排序都是可以改动的。
尽量使每个桶的数据均匀,桶内排序尽量高效。

实现

实现的一种算法
1.找出待排序数组中的最大值 max、最小值 min
2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max- min)/arr.length+1
3.遍历数组 arr,计算每个元素 arr[i] 放的桶
4.每个桶各自排序
5.替换原数组

/**
 * @Author: vividzcs
 * @Date: 2021/3/8 11:50 下午
 */
public class BucketSort {
    public static void main(String[] args) {
        int[] arr = {6,2,9,1,2,0,0};
        bucketSort(arr);
        for (int i=0; i<arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    /**
     * 1.找出待排序数组中的最大值 max、最小值 min
     * 2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max- min)/arr.length+1
     * 3.遍历数组 arr,计算每个元素 arr[i] 放的桶
     * 4.每个桶各自排序
     * 5. 替换原数据
     */
    private static void bucketSort(int[] arr) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        for (int i=0; i<arr.length; i++) {
            max = Math.max(max, arr[i]);
            min = Math.min(min, arr[i]);
        }
        int bucketNum = (max - min) / arr.length + 1;
        List<List<Integer>> list = new ArrayList<>(bucketNum);
        for (int i=0; i<bucketNum; i++) {
            list.add(new ArrayList<>());
        }
        for (int i=0; i<arr.length; i++) {
            int num = (arr[i] - min) / (arr.length);
            list.get(num).add(arr[i]);
        }

        for (int i=0; i<bucketNum; i++) {
            Collections.sort(list.get(i));
        }

        int index = 0;
        for (int i=0; i< list.size(); i++) {
            List<Integer> bucket = list.get(i);
            for (int j=0; j<bucket.size(); j++) {
                arr[index++] = bucket.get(j);
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构与算法——计数排序、桶排序、基数排序 计数排序 计数排序有如下四个步骤。 首先会对每个输入进行频率统计,得...
    sunhaiyu阅读 4,876评论 0 11
  • 总结 算法详解 tips:以下算法中均按从小到大排序 一 冒泡排序/Bubble Sort 思路 采用两两比较并交...
    Xun_Moo阅读 3,134评论 0 1
  • 桶排序概述与实现思路 桶排序的思想近乎彻底的分治思想。假设现在需要对一百万个数进行排序。我们可以将其等长地分到10...
    冭朶d譕萘阅读 4,631评论 0 2
  • 冒泡排序,选择排序,插入排序(直接插入,二分插入,希尔排序),快速排序,堆排序,归并排序,计数排序,桶排序,基数排...
    亮涛阅读 2,325评论 0 0
  • 学号:20021211189 姓名:赵治伟 【嵌牛导读】桶排序(Bucket sort)是计数排序算法[htt...
    赵小赵的花花世界阅读 3,214评论 0 0

友情链接更多精彩内容