#include#include void odd_before_even(int *arr, int len) { assert(arr); int left = 0, right = len - 1; while (left < right) { // 從左找第一個偶數 while (left < right && (arr[left] & 1)) left++; // 從右找第一個奇數 while (left < right && !(arr[right] & 1)) right--; if (left < right) { int tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } } int main() { int arr[] = {1,2,3,4,5}; int len = sizeof(arr)/sizeof(arr[0]); odd_before_even(arr, len); for (int i = 0; i < len; i++) printf("%d ", arr[i]); // 輸出範例: 1 5 3 4 2 (奇數在前,順序可能變) return 0; }
arr[left] & 1 判斷奇數 (1),!(arr[right] & 1) 判斷偶數 (0)。left++, right-- 避免死循環。見上一篇方法一 (額外空間法)。