標準氣泡排序會執行固定輪數的比較交換,即使陣列已提前有序仍繼續運行。引入「交換旗標」可在某輪無交換發生時立即結束,大幅提升近乎有序資料的排序效能。
int arr[N] = {1,2,3,4,5};
BOOL flag = NO;
for (int i = 0; i < N - 1; i++) {
flag = NO;
for (int j = 0; j < N - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
flag = YES;
// 交換 arr[j] 與 arr[j+1]
}
}
if (flag == NO) // 本輪無交換,代表已排序完成
break;
}
快速排序通常是實務上效能最佳的通用排序法,但氣泡排序優化版適合教學與小規模近乎有序資料集。