1. 程式人生 > 實用技巧 >八大基本排序演算法-----冒泡演算法

八大基本排序演算法-----冒泡演算法


一. 氣泡排序(BubbleSort)


  • 基本思想:兩個數比較大小,較大的數下沉,較小的數冒起來。

  • 過程:

    • 比較相鄰的兩個資料,如果第二個數小,就交換位置。
    • 從後向前兩兩比較,一直到比較最前兩個資料。最終最小數被交換到起始的位置,這樣第一個最小數的位置就排好了。
    • 繼續重複上述過程,依次將第2.3...n-1個最小數排好位置。

  • 平均時間複雜度:O(n2)

  • java程式碼實現:

public static void BubbleSort(int [] arr){

     int temp;//臨時變數
     for(int i=0; i<arr.length-1; i++){   //
表示趟數,一共arr.length-1次。 for(int j=arr.length-1; j>i; j--){ if(arr[j] < arr[j-1]){ temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } }

優化:

    • 針對問題:
      資料的順序排好之後,冒泡演算法仍然會繼續進行下一輪的比較,直到arr.length-1次,後面的比較沒有意義的。

    • 方案:
      設定標誌位flag,如果發生了交換flag設定為true;如果沒有交換就設定為false。
      這樣當一輪比較結束後如果flag仍為false,即:這一輪沒有發生交換,說明資料的順序已經排好,沒有必要繼續進行下去。

      • public static void BubbleSort1(int [] arr){
        
           int temp;//臨時變數
           boolean flag;//是否交換的標誌
           for(int i=0; i<arr.length-1; i++){   //表示趟數,一共 arr.length-1 次
        
               // 每次遍歷標誌位都要先置為false,才能判斷後面的元素是否發生了交換
        flag = false; for(int j=arr.length-1; j>i; j--){ //選出該趟排序的最大值往後移動 if(arr[j] < arr[j-1]){ temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; flag = true; //只要有發生了交換,flag就置為true } } // 判斷標誌位是否為false,如果為false,說明後面的元素已經有序,就直接return if(!flag) break; } }