排序--氣泡排序
阿新 • • 發佈:2021-06-17
氣泡排序就是重複“從序列右邊開始比較相鄰兩個數字的大小,再根據結果交換兩個數字的位置”這一操作的演算法。在這個過程中,數字會像泡泡一樣,慢慢從右往左“浮”到序列的頂端,所以這個演算法才被稱為“氣泡排序”。
解說
在氣泡排序中,第 1 輪需要比較 n -1 次,第 2 輪需要比較 n -2 次……第 n -1 輪需要比較 1 次。因此,總的比較次數為 (n -1) +(n -2) +…+1 ≈ n2 /2。這個比較次數恆定為該數值,和輸入資料的排列順序無關。不過,交換數字的次數和輸入資料的排列順序有關。假設出現某種極端情況,如輸入資料正好以從小到大的順序排列,那麼便不需要任何交換操作;反過來,輸入資料要是以從大到小的順序排列,那麼每次比較數字後便都要進行交換。因此,氣泡排序的時間複雜度為 O(n2)。
1 public static void main(String[] args) { 2 int[] array = {4, 6, 1, 7, 8, 9, 2, 11,5,12,32,45,66,77,23,556}; 3 int length = array.length; 4 Long startTime = System.currentTimeMillis(); 5 System.out.println("startTime time = " + startTime); 6 7 //-1少迴圈一次,最後一個肯定是滿足條件的 8 for (int i = 0; i < length - 1; i++) { 9 // -1是防止array[j + 1]陣列越界 10 // -i是每次外迴圈結束都已經排好一個 11 for (int j = 0; j < length - i - 1; j++) { 12 if (array[j] > array[j + 1]) { 13 int temp = array[j];14 array[j] = array[j + 1]; 15 array[j + 1] = temp; 16 } 17 } 18 } 19 Long endTime = System.currentTimeMillis(); 20 System.out.println("endTime time = " + endTime); 21 System.out.println("cast time = " + (endTime - startTime)); 22 for (int di : array) { 23 System.out.println(di); 24 } 25 }