OJ 整数奇偶排序 C语言
时间: 2025-01-03 14:40:27 浏览: 8
### C语言实现整数奇偶排序
为了实现在C语言中对一组整数按照奇偶性质进行特定顺序的排序,可以采用如下方法:
#### 方法概述
程序接收一系列整数作为输入,随后将这些数字分为两部分处理:一部分为奇数,另一部分为偶数。对于奇数列表,执行降序排列;而对于偶数列表,则实施升序排列。最后,合并两个已排序的部分并输出最终结果。
#### 示例代码展示
下面是一段完整的C语言代码示例,用于完成上述功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数声明区
void sort_odd_even(int *arr, int size);
int cmpfunc_desc(const void* a, const void* b);
int cmpfunc_asc(const void* a, const void* b);
int main() {
int nums[10];
// 输入十个整数
for (int i = 0; i < 10; ++i){
scanf("%d", &nums[i]);
}
// 对数组中的元素依据奇偶性分类排序
sort_odd_even(nums, 10);
// 打印排序后的结果
for (int j = 0; j < 10; ++j){
if(j != 9) printf("%d ", nums[j]);
else printf("%d\n", nums[j]);
}
return 0;
}
/// @brief 将给定数组内的奇数值按降序排列,偶数值按升序排列
/// @param arr 数组指针
/// @param size 数组大小
void sort_odd_even(int *arr, int size){
int odd_count = 0;
// 创建临时存储空间分别保存奇数和偶数
int odds[size], evens[size];
// 遍历原数组区分奇偶并将它们存入对应的子数组内
for (int k = 0; k < size; ++k){
if (*(arr+k) % 2 == 0){ // 如果当前元素是偶数
evens[k - odd_count] = *(arr+k);
}else{ // 否则它是奇数
odds[odd_count++] = *(arr+k);
}
}
// 使用qsort库函数对奇数做降序排序
qsort(odds, odd_count, sizeof(int), cmpfunc_desc);
// 使用qsort库函数对偶数做升序排序
qsort(evens, size-odd_count, sizeof(int), cmpfunc_asc);
// 把整理好的奇数放回原始位置前面
for (int l = 0; l < odd_count; ++l){
*(arr+l) = odds[l];
}
// 而后把整理好的偶数接续放置于后面的位置上
for (int m = 0; m < size-odd_count; ++m){
*(arr+m+odd_count) = evens[m];
}
}
/// @brief 辅助比较器——支持降序排列
/// @param a 第一个待比较项地址
/// @param b 第二个待比较项地址
/// @return 返回值决定a,b之间的相对次序
int cmpfunc_desc(const void* a, const void* b){
return(*(int*)b - *(int*)a);
}
/// @brief 辅助比较器——支持升序排列
/// @param a 第一个待比较项地址
/// @param b 第二个待比较项地址
/// @return 返回值决定a,b之间的相对次序
int cmpfunc_asc(const void* a, const void* b){
return(*(int*)a - *(int*)b);
}
```
此段代码实现了读取用户输入的一系列整数,并根据其奇偶属性进行了相应的排序操作[^5]。
阅读全文