1. 程式人生 > 其它 >排序--氣泡排序

排序--氣泡排序

  氣泡排序就是重複“從序列右邊開始比較相鄰兩個數字的大小,再根據結果交換兩個數字的位置”這一操作的演算法。在這個過程中,數字會像泡泡一樣,慢慢從右往左“浮”到序列的頂端,所以這個演算法才被稱為“氣泡排序”。

解說

  在氣泡排序中,第 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 }