一文秒懂桶排序

Posted 玩编程地码农

tags:

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

桶排序。
原理:把一个区间的数据放在一个桶里,另一个区间的数据放在另一个桶里,放完数据之后把每一个桶里的数据进行排序就完成了核心过程。区间的大小由自己设定(这个设定简单)。桶的数量的话就是(总区间)/(每个桶区间大小)+1。

给个图加深点印象。

public class BucketSort{
    public static int[] bucketSort(int[] arr{
        if(arr==null||arr.length<2return arr;
        int n = arr.length;
        int min = arr[0];
        int max = arr[0];
        for(int i=1;i<n;i++) {      //求最大值和最小值
            if(max<arr[i]) max = arr[i];
            if(min>arr[i]) min = arr[i];
        }
        int d = max - min;          //d代表总区间的大小
        int bucketNum = d/5+1;      //桶的数目 区间大小设为5(这个看个人喜欢,即应用场景)。
        ArrayList<LinkedList<Integer>> bucketList = new ArrayList<>(bucketNum);//建立桶数组
        for(int i =  0;i<bucketNum ; i++) {//桶初始化
            bucketList.add(new LinkedList());
        }
        int index;
        for(int i =0;i< n ;i++) {
            //index表示该数据所在的桶位置
            index = (arr[i]-min)/5;     
            //将数据放入所对应的桶
            bucketList.get(index).add(arr[i]);
        }
        //将每个桶的数据进行排序
        for(int i=0;i<bucketNum;i++) {
            Collections.sort(bucketList.get(i));
        }
        index = 0;
        //将每个桶中排好的数据放入arr数组中
        for(LinkedList<Integer> list:bucketList) {
            for(Integer element:list) {
                arr[index++] = element;
            }
        }
        return arr;
    }
    //测试用例
    public static void main(String[] args{
        int [] a = {4,6,5,2,9,1,8};
        BucketSort r1 = new BucketSort();
        a = r1.bucketSort(a);
        for(int j=0;j<a.length;j++) {
            System.out.print(a[j]+" ");
        }
    }
}


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

一文秒懂!如何成功进行自动化的UI测试?

一文秒懂CQRS!

一文秒懂CPU使用率

到底什么是 OAuth 2.0 ? 一文秒懂!

苹果发布会亮点汇总:一文秒懂

一文带你秒懂java中的hashcode