1. 程式人生 > >冒泡,插入,選擇排序總結

冒泡,插入,選擇排序總結

氣泡排序中資料的交換操作:
if (a[j] > a[j+1]) { // 交換
   int tmp = a[j];
   a[j] = a[j+1];
   a[j+1] = tmp;
   flag = true;
}

插入排序中資料的移動操作:
if (a[j] > value) {
  a[j+1] = a[j];  // 資料移動
} else {
  break;
}

 程式碼實現上看,氣泡排序的資料交換要比插入排序的資料移動複雜,冒泡需要3個賦值操作,而插入只需要1個。

把執行一個賦值語句的時間粗略地計為單位時間(unit_time),然後分別用氣泡排序和插入排序對同一個逆序度是 K 的陣列進行排序。用氣泡排序,需要 K 次交換操作,每次需要 3 個賦值語句,所以交換操作總耗時就是 3*K 單位時間。而插入排序中資料移動操作只需要 K 個單位時間。

實驗,針對上面的氣泡排序和插入排序的 Java 程式碼,我寫了一個性能對比測試程式,隨機生成 10000 個數組,每個陣列中包含 200 個數據,然後在我的機器上分別用冒泡和插入排序,氣泡排序演算法大約 700ms 才能執行完成,而插入排序只需要 100ms 左右就能搞定!

所以,雖然氣泡排序和插入排序在時間複雜度上是一樣的,都是 O(n2),但是如果我們希望把效能優化做到極致,那肯定首選插

入排序。