1. 程式人生 > 其它 >Java基礎學習:陣列08(氣泡排序:必須掌握)

Java基礎學習:陣列08(氣泡排序:必須掌握)

Java基礎學習:陣列08(氣泡排序:必須掌握)

  • 氣泡排序:

    • 氣泡排序無疑是最為出名的排序演算法之一,總共有8大排序;

    • 冒泡的程式碼還是相當簡單的,2曾迴圈,外層冒泡輪數,裡層依次比較,江湖中人盡皆知;

    • 我們看到巢狀迴圈,應該立馬就可以得出這個演算法的時間複雜度為O(n2)

  • 程式碼例子:

    public class ArrayDemo07 {
    public static void main(String[] args) {
    //氣泡排序:必會

    int[] arr={1,5,3,7,9,4};
    int[] arr1=sort(arr);
    System.out.println(Arrays.toString(arr1));


    }

    //氣泡排序
    /**
    * 核心思路:
    *
    * 1,比較陣列中,相鄰的2個數組元素;如果第一個數比第二個數大,我們就交換他們的位置;
    * 2,每一次比較,都會產生出一個最大,或者最小的數;
    * 3,下一輪則, 可以少一次排序;
    * 4,依次迴圈,直到結束;
    */

    public static int[] sort(int[] array){
    //臨時變數:負責交換資料
    int temp=0;
    //外層迴圈:判斷我們這個要走多少次
    for (int i = 0; i < array.length-1; i++) {
    //內層迴圈,比較2個數,如果第一個數比第二個數大,我們就交換他們的位置
    for (int j = 0; j < array.length-1-i; j++) {
    if(array[j]>array[j+1]){
    temp=array[j+1];
    array[j+1]=array[j];
    array[j]=temp;
    }
    }
    }
    return array;
    }

    }

  • 思考:如何優化?

    • 優化程式碼:

      public class ArrayDemo07 {
      public static void main(String[] args) {
      //氣泡排序:必會

      int[] arr={1,5,3,7,9,4};
      int[] arr1=sort(arr);
      System.out.println(Arrays.toString(arr1));


      }

      //氣泡排序
      /**
      * 核心思路:
      *
      * 1,比較陣列中,相鄰的2個數組元素;如果第一個數比第二個數大,我們就交換他們的位置;
      * 2,每一次比較,都會產生出一個最大,或者最小的數;
      * 3,下一輪則, 可以少一次排序;
      * 4,依次迴圈,直到結束;
      */

      public static int[] sort(int[] array){
      //臨時變數:負責交換資料
      int temp=0;

      //外層迴圈:判斷我們這個要走多少次
      for (int i = 0; i < array.length-1; i++) {

      boolean flag=false;//通過flag標識位減少沒有意義的比較
      //內層迴圈,比較2個數,如果第一個數比第二個數大,我們就交換他們的位置
      for (int j = 0; j < array.length-1-i; j++) {
      if(array[j]>array[j+1]){
      temp=array[j+1];
      array[j+1]=array[j];
      array[j]=temp;
      flag=true;
      }
      }
      if(flag==false){//這一輪沒有進行比較
      break;
      }
      }
      return array;
      }

      }

  • 筆記:

    • 氣泡排序,就算背也要背會!必掌握!