排序算法——桶排序

Posted Java架构师进阶手册

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法——桶排序相关的知识,希望对你有一定的参考价值。

一、思想

一句话总结:划分多个范围相同的区间,每个子区间自排序,最后合并

桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。

桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效

二、图解过程


代码实现:

public 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;
ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum);
for(int i = 0; i < bucketNum; i++){
    bucketArr.add(new ArrayList<Integer>());
}

// 将每个元素放入桶
for(int i = 0; i < arr.length; i++){
    int num = (arr[i] - min) / (arr.length);
    bucketArr.get(num).add(arr[i]);
}

// 对每个桶进行排序
for(int i = 0; i < bucketArr.size(); i++){
    Collections.sort(bucketArr.get(i));
}

// 将桶中的元素赋值到原序列
int index = 0;
for(int i = 0; i < bucketArr.size(); i++){
    for(int j = 0; j < bucketArr.get(i).size(); j++){
        arr[index++] = bucketArr.get(i).get(j);
    }
}  
}


深度学习技术和大数据技术,在搜索、推荐、广告、O2O等应用领域的落地和蓬勃发展,使得越来越多的人投入到了这个广阔的技术领域中,各大互联网公司对算法工程师、大数据工程师也是青睐有加。但随着从业人数的增加,以及技术中台的发展,相关从业者也越来越有危机感。


以上是关于排序算法——桶排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法——桶排序

桶排序算法

桶排序算法

排序算法 (10.桶排序)

排序算法一:桶排序

数据结构与算法桶排序