入门算法之最快最简单的排序:桶排序

桶排序算法是最简单最快速的排序算法,今天我们先从最简单的开始接触算法,首先我们先看下代码实现,然后根据结果再来对该算法进行分析:

public class BucketSort {
    
    public static void main(String[] args) {
        // 1.等待排序的数组
        int[] waitNumbers = {3,15,8,13,6,35};
        // 2.准备好空桶 (带排序数字中最大的那个值+1)
        int[] bucketNumbers = new int[36];
        // 3.待排序的数字入桶
        for (int i = 0; i < waitNumbers.length; i++) {
            bucketNumbers[waitNumbers[i]] = waitNumbers[i];
        }
        // 4.从桶中取出排序后的结果
        for (int i = 0; i < bucketNumbers.length; i++) {
            if(bucketNumbers[i] > 0){
                System.out.print(bucketNumbers[i]+" ");
            }
        }
    }
}
结果:3 6 8 13 15 35 

分析

待排序数字个数为m;

桶的个数为n;

待排序数字入桶遍历m次;

从桶中取出值遍历桶n次;

所以,时间复杂度为m+n+m+n即O(m+n+m+n)=O(2*(m+n)),通常在计算时间复杂度时较小的常数可以忽略,所以桶排序的时间复杂度为:O(M+N)。

 

优点:快速,简单

缺点:消耗空间,比较耗内存(典型的以空间换时间),只能针对正整数排序;

 

应用场景:待排序的数数量不多时以及排序最大值不是特别大时比较适合,最大值太多会占用太多的空桶(内存空间),例如,年级考试,比赛成绩排名等;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章