氣泡排序的優化 java
阿新 • • 發佈:2018-11-26
氣泡排序簡單,基本流程是:每一輪從頭開始兩兩比較,將較大的項放在較小項的右邊,這樣每輪下來保證該輪最大的數在最右邊
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語句)。