欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

最快、最简单的排序算法——桶排序

程序员文章站 2022-05-13 21:34:12
...

什么是桶排序

桶排序,也叫做箱排序,是一种排序算法,也是排序算法中最快、最简单的排序算法。其中的思想是我们首先要知道所有待排序的范围,然后需要有在这个范围的同样数量的桶,接着把元素放到对应的桶中,最后按顺序输出。

这时间上是简易版的桶排序,试想一下,如果要排序的范围是0-100万,使用桶排序方法进行排序,那么我们要准备100万个桶,这显然对于计算机的开销肯定很大,所以,桶排序在有这时间最快的优势,同时也有这及其耗费内存的缺点。

桶排序的实现


我们怎么在代码中实现桶排序呢?其实很简单,使用数组就好了,比如有11个桶,我们只需要声明一个长度为11的数组,然后把每个元素往桶中放时,就把数组指定位置的值加1,最终输出数组的下标,数组每个位置的值为几就输出几次下标,这样就可以实现桶排序了。

下面我们来看看桶排序的代码实现

package cn.csu;

public class BucketSort {
    private int[] buckets;
    private int[] array;

    public BucketSort(int range,int[] array){
        this.buckets = new int[range];
        this.array = array;
    }

    public void sort(){
        if(array != null && array.length >1){
            for(int i=0;i<array.length;i++){
                buckets[array[i]]++;
            }
        }
    }
    public void print() {
        //倒序输出
        for(int i =buckets.length;i>=0;i--){
            for (int j=0;j<buckets[i];j++){
                //元素中的值为几,就说明有多少个相同值的元素,就输出几遍
                System.out.println(i);
            }
        }
    }
}

分析:桶排序实际上只需要遍历一遍所有的待排序元素,然后依次放入指定的位置,如果加上输出排序的时间,那么需要遍历所有的桶,时间复杂度为O(n+m),其中n为待排序元素的个数,m为桶的个数,这时相当快的排序算法,但是,对于空间的小号来说太大了。当n越大,空间浪费就越大,所以,如果数据跨度过大,桶排序并不适用跨度范围大的排序。

相关标签: 桶排序 算法