輸入 10 個整數,輸出排序後的序列:奇數在前、偶數在後,各自升序排列。例如輸入 10 9 8 7 6 5 4 3 2 1,輸出奇數部分 1 3 5 7 9,偶數部分 2 4 6 8 10。
oddArr,偶數存入 evenArr,記錄各自長度 m、n。sortFunction(升序)。#include\ #define COUNT 10\ #define bool int\ #define true 1\ #define false 0\ int* sortFunction(int data[]) {\ for (int j = 0; j < COUNT - 1; ++j) {\ for (int i = 0; i < COUNT - 1 - j; ++i) {\ if (data[i] > data[i+1]) {\ int tmp = data[i];\ data[i] = data[i+1];\ data[i+1] = tmp;\ }\ }\ }\ return data;\ }\ bool isOddNumber(int data) {\ return (data % 2 != 0);\ }\ int main() {\ int arr[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};\ int oddArr[COUNT] = {0}, evenArr[COUNT] = {0};\ int m = 0, n = 0;\ \ for (int i = 0; i < COUNT; ++i) {\ if (isOddNumber(arr[i])) oddArr[m++] = arr[i];\ else evenArr[n++] = arr[i];\ }\ \ int *tmp = sortFunction(oddArr);\ puts("\\n========odd number==========\\n");\ for (int i = 0; i < COUNT; ++i) {\ int num = *tmp++;\ if (num != 0) printf("%d ", num);\ }\ \ tmp = sortFunction(evenArr);\ puts("\\n========even number==========\\n");\ for (int i = 0; i < COUNT; ++i) {\ int num = *tmp++;\ if (num != 0) printf("%d ", num);\ }\ printf("\\nover");\ return 0;\ }
========odd number==========\ 1 3 5 7 9 \ ========even number==========\ 2 4 6 8 10 \ over
sortFunction(int data[], int len) 避免排序哨兵 0,支援任意長度。qsort + 比較函數,更高效且穩定。,直接用 bool/true/false。#include\ #include \ int cmp_asc(const void *a, const void *b) {\ return *(int*)a - *(int*)b;\ }\ // 原地分區:奇數前、偶數後,返回奇數個數\ int partition_odd_even(int arr[], int n) {\ int left = 0, right = n - 1;\ while (left < right) {\ while (left < right && (arr[left] & 1)) ++left;\ while (left < right && !(arr[right] & 1)) --right;\ if (left < right) {\ int t = arr[left]; arr[left] = arr[right]; arr[right] = t;\ }\ }\ return (arr[left] & 1) ? left + 1 : left;\ }\ int main() {\ int arr[] = {10,9,8,7,6,5,4,3,2,1};\ int n = 10;\ int odd_cnt = partition_odd_even(arr, n);\ qsort(arr, odd_cnt, sizeof(int), cmp_asc);\ qsort(arr + odd_cnt, n - odd_cnt, sizeof(int), cmp_asc);\ for (int i = 0; i < n; ++i) printf("%d ", arr[i]);\ }
此版本空間 O(1)、時間 O(n log n),更符合工程標準。原版作為教學演示清晰展示「分離→排序→合併」三階段思想,兩者各有價值。