入門算法之最快最簡單的排序:桶排序

桶排序算法是最簡單最快速的排序算法,今天我們先從最簡單的開始接觸算法,首先我們先看下代碼實現,然後根據結果再來對該算法進行分析:

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)。

 

優點:快速,簡單

缺點:消耗空間,比較耗內存(典型的以空間換時間),只能針對正整數排序;

 

應用場景:待排序的數數量不多時以及排序最大值不是特別大時比較適合,最大值太多會佔用太多的空桶(內存空間),例如,年級考試,比賽成績排名等;

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