排序算法:冒泡排序(二)

分析:

  • 依次比較兩個相鄰的元素,將值大的元素交換到右邊
  • N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數爲(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數

冒泡排序的優點:

  • 每進行一趟排序,就會少比較一次,因爲每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了算法的量。

代碼實現 

public class Test {

    public static void main(String[] args) {
        int[] arrs = {11, 15, 12, 10, 8, 5, 4, 15};
        bubbleSort (arrs);
        System.out.println (Arrays.toString (arrs));
    }

    /**
     * 冒泡排序
     *
     * @param arrs
     * @return
     */
    public static void bubbleSort(int[] arrs) {
        // 獲取數組的長度
        int len = arrs.length;
        // 判斷邊界,爲null或只存在一個數字直接返回
        if (arrs == null || len < 2) return;

        /**
         * 思想:兩兩比較,較大的數排右邊,一輪下來可以確定數組的最後一位爲最大數值
         * len - i - 1 表示每輪循環不比較已確定的數值
         */
        for (int i = 0; i < len - 1; i++) {
            for (int j = 0; j < len - i - 1; j++) {
                // 相鄰兩數比較,大的數組替換位置
                if (arrs[j] >= arrs[j + 1]) {
                    arrs[j] = arrs[j + 1] + arrs[j] - (arrs[j + 1] = arrs[j]);
                }
            }
        }
    }


}
  • 控制檯輸出:

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