冒泡,插入,選擇排序總結
阿新 • • 發佈:2018-11-21
氣泡排序中資料的交換操作:
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),但是如果我們希望把效能優化做到極致,那肯定首選插
入排序。