1. 程式人生 > >蠻力法之氣泡排序(簡單易懂)

蠻力法之氣泡排序(簡單易懂)

簡介

氣泡排序屬於基本的教學式排序,真正的開發基本不會獨立使用。它屬於蠻力法

  • 氣泡排序的思想非常簡單
    • 遍歷所有元素,將元素0和11和22和3這樣進行比較。值大的放到後面,像冒泡一樣向上升。
    • 遍歷完第一遍,陣列的最後一個值一定是最大值
    • 然後再進行遍歷、比較。完後,陣列的倒數第二個值為第二大值
    • 以此類推!

核心程式碼

/**
 * 氣泡排序
 * 
 * @param arr
 */
public static void bubbleSort(int[] arr) {
    // 需要迴圈的次數
    for (int i = 0; i < arr.length - 1
; i++) { boolean flag = true; // 需要比較的元素個數 for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; flag = false; } } if
(flag) { break; } } }
  • 這是改良後氣泡排序!相比較普通的氣泡排序,上述只增加了flag標誌及判斷。
  • 雖然氣泡排序是蠻力法,屬於從頭到尾一個個比較。但有可能在運氣好的時候,沒有將迴圈次數迴圈完就已經排序完成。
  • 判斷的依據就是內層for迴圈的if判斷。如果某一輪的if判斷沒有進去,那就說明沒有交換的可能了。進一步說明,排序提前完畢!

優缺點

  • 優點

    • 簡單!
  • 缺點

    • 效率不高,畢竟是蠻力法。

複雜度

  • 時間複雜度

    • O(n^2)
  • 空間複雜度

    • O(1)
  • 穩定度

    • 穩定

應用場景

  • 5個數以內的排序用冒泡最好
  • 資料量足夠小,比如鬥牛遊戲的牌面排序、多關鍵字排序