冒泡排序之因此叫冒泡排序,正是由於這種排序算法的每個元素均可以像小氣泡同樣,根據自身大小,一點一點的向着數組的一側移動,按照冒泡排序的思想,咱們要把相鄰的元素兩兩比較,當一個元素大於右側相鄰元素時,交換它們的位置;當一個元素小於或等於右側相鄰元素時,位置不變。動圖以下java
/** * 1.0版本 * @param array */ public static void sort1(int[] array){ // 控制全部回合 for (int i = 0; i < array.length; i++) { // 實現每輪的冒泡處理 for (int j = 0; j < array.length-i-1;j++){ int tmp = 0; if (array[j] > array[j+1]){ tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; } } } }
第六輪排序後,數列已是有序的了[1,2,3,5,6,7,8,9],但是排序算法仍然會繼續執行第七輪排序,遇到這種狀況,若是能判斷出數列已經有序並做出標記,那麼剩下幾輪的排序就沒必要執行了算法
public static void sort2(int[] array){ //控制全部回合 for (int i = 0; i < array.length; i++) { //有序標記,每一輪的初始值都是true boolean isSorted = true; //實現每輪的冒泡處理 for (int j = 0; j < array.length-i-1;j++){ int tmp = 0; if (array[j] > array[j+1]){ tmp = array[j]; array[j] = array[j+1]; array[j+1] = tmp; //由於有元素進行交換,因此不是有序的 isSorted = false; } } //數組已經有序 if (isSorted){ break; } } }