入門算法之中國好鄰居:冒泡排序

上文我們聊到桶排序,瞭解到雖然桶排序簡單,快速,但是同時也有其致命的缺點:那就是空桶對內存空間的極大浪費以及只能針對正整數排序;所以我們需要一個較好的算法來解決這兩個問題,接下來我們就來認識一個新的算法:冒泡排序。

 

先上代碼實現:

public class BubbleSort {

    public static void main(String[] args) {
        // 1.等待排序的數組
        int[] waitNumbers = {3,15,8,13,6,35};
        // 2.定義一個臨時變量
        int temp;
        // 3.冒泡趟數
        for (int i = 0; i < waitNumbers.length - 1; i++) {
            for (int j = 0; j < waitNumbers.length - i - 1; j++) {
                if (waitNumbers[j + 1] < waitNumbers[j]) {
                    temp = waitNumbers[j];
                    waitNumbers[j] = waitNumbers[j + 1];
                    waitNumbers[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(waitNumbers));
    }
}
結果:[3, 6, 8, 13, 15, 35]
如果你想從大到小的順序排序就將判斷條件換下即可;

分析(已從小到大爲例):從第一個數開始,拿第一個數依次與相鄰的兩個數比較,如果後面一位小於前面一位就將這兩個數字的位置互換,經過第一次冒泡之後,我們就能將最大的那位數字排到了最後一位;

第二輪,繼續從第一個數開始,相鄰比較直到倒數第二位結束,就將第二大的數排到了倒數第二位;

依次類推下去:我們將能將數字從小到大排序;

案例中i就代表需要遍歷的輪數,j代表每一輪的遍歷,整個過程類似冒泡將最大的數依次冒出水面,因此得名:冒泡算法

冒泡算法的核心:雙重嵌套循環,我們不難發現該算法的時間複雜度爲:O(N²)這個時間複雜度是比較高的

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