C语言奇偶数按奇数从大到小在前,偶数从小到大在后顺序排列代码
时间: 2024-12-25 13:29:23 浏览: 7
在C语言中,按照您描述的要求对奇数和偶数进行排序,我们需要先将它们分开处理,然后再合并。由于C标准库本身并不直接支持这种特定的排序规则,我们通常会采用自定义比较函数来辅助排序。下面是一个使用qsort函数的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 引入时间库,以便演示随机化
// 定义比较函数,根据奇偶性和大小进行排序
int compare(const void *a, const void *b) {
int num1 = *((const int*)a);
int num2 = *((const int*)b);
if (num1 % 2 != num2 % 2) { // 按奇偶分组
return num1 % 2 > num2 % 2 ? 1 : -1;
} else { // 同样是奇偶,则按数值大小排序
return num1 > num2 ? 1 : (num1 < num2 ? -1 : 0);
}
}
int main() {
int arr[] = {5, 2, 9, 4, 7, 1, 3, 6, 8, 11}; // 示例数组
int n = sizeof(arr) / sizeof(arr[0]);
srand(time(0)); // 初始化随机种子
qsort(arr, n, sizeof(arr[0]), compare); // 使用自定义比较函数进行排序
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这段代码首先定义了一个`compare`函数,该函数接受两个元素作为输入并根据奇偶性和数值大小返回负数、零或正数,表示其顺序。然后,在`main`函数中使用`qsort`函数,传入数组、元素个数、每个元素的大小以及我们的自定义比较函数。
当你运行这个程序,得到的排序结果会满足您的要求,即奇数从大到小,偶数从小到大。
阅读全文