1. 程式人生 > >氣泡排序的優化 java

氣泡排序的優化 java

  氣泡排序簡單,基本流程是:每一輪從頭開始兩兩比較,將較大的項放在較小項的右邊,這樣每輪下來保證該輪最大的數在最右邊

public void bubbleSort(int[] a) {
    for(int i = a.length - 1; i > 0; i--) {
        for(int j = 0; j < i; j++) {
            if(a[j] > a[j+1])
                 //交換,具體實現略
                 swap(a, j, j+1); 
        }
    }
}

我們可以假設一種場景,比如 8 1 2 3 5 7,進行一次排序之後,結果就變成了 1 2 3 5 7 8,那我們還有必要再像上面程式碼裡那樣繼續迴圈下去嗎?肯定沒有必要了,因為這已經是最終結果了。

優化:那針對上面的程式碼,我們優化的點主要在於:假如某一趟排序之後已經有序,我們需要減少排序的趟數。否則就做了很多無用功。

針對這個問題,我們可以考慮在演算法中加入一個布林變數,來標識該輪有沒有進行資料的交換,若在某一趟排序中未發現數據位置的交換,則說明待排序的無序區中所有的項均已滿足排序後的結果。那麼就沒有必要再次排序下去了。可以如下改造:

public void bubbleSort(int[] a) {
   boolean exchange;
   for(int i = a.length - 1; i > 0; i--) {
       exchange = false;
       for(int j = 0; j < i; j++) {
           if(a[j] > a[j+1]) {
               swap(a, j, j+1);
               exchange = true;
           }
       }
       if(!exchange) return;//結束方法的執行
   }
}

Java中的return語句總是和方法有密切關係,return語句總是用在方法中,有兩個作用,一個是返回方法指定型別的值(這個值總是確定的),一個是結束方法的執行(僅僅一個return語句)。

參考自:https://mp.weixin.qq.com/s/kERuJiMMvY7Qb0mDK6rP2A