「奇偶排序」指將陣列重組為「所有奇數在前,所有偶數在後」。本文對比兩種實現:額外空間法(穩定、O(N))與冒泡法(原地、O(N²)),分析時空權衡。
分配兩個暫存陣列分別收集奇數與偶數,再合併回原陣列。
void odd_even_sort_extra(int arr[], int len) {
int *odd = malloc(len * sizeof(int));
int *even = malloc(len * sizeof(int));
int o = 0, e = 0;
for (int i = 0; i < len; i++) {
if (arr[i] & 1) odd[o++] = arr[i];
else even[e++] = arr[i];
}
memcpy(arr, odd, o * sizeof(int));
memcpy(arr + o, even, e * sizeof(int));
free(odd); free(even);
}
利用冒泡排序思想,將偶數像氣泡一樣「浮」到後端。
void odd_even_sort_bubble(int arr[], int len) {
for (int i = 0; i < len - 1; i++) {
int swapped = 0;
for (int j = 0; j < len - 1 - i; j++) {
if ((arr[j] % 2 == 0) && (arr[j+1] % 2 == 1)) { // 前偶後奇,交換
int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp;
swapped = 1;
}
}
if (!swapped) break; // 優化:提前結束
}
}
| 指標 | 額外空間法 | 冒泡法 |
|---|---|---|
| 時間複雜度 | O(N) | O(N²) |
| 空間複雜度 | O(N) | O(1) |
| 穩定性 | 穩定 | 不穩定 |
| 適用場景 | 通用、大數據、需穩定 | 極小陣列、嚴格受限記憶體 |
adjust_array),O(N) 時間、O(1) 空間、但不穩定。選擇演算法本質是時空權衡,理解各法優劣,方能因地制宜。