使用C语言,某无序一维数组arr[N]中,将数组中的奇数和偶数分开,并排序输出到一个2行的二维数组中,第一行存放奇数,第二行存放偶数,二维数组原本全部存放-1
时间: 2024-09-06 21:08:01 浏览: 99
在C语言中,你可以通过以下步骤实现这个功能:
1. **初始化二维数组**: 创建一个大小为2xN的二维数组`result[2][N]`,并将所有元素设置为-1。这将是存储奇数和偶数的结果数组。
2. **遍历原数组**:
- 定义两个指针`i`和`j`分别指向奇数和偶数部分的开始位置,初始值都为0。
- 使用一个`for`循环遍历`arr`数组,从索引0开始,步长为1。
3. **条件判断**:
- 对于每个元素`arr[k]`:
- 如果它是奇数(`arr[k] % 2 == 1`),将其复制到结果数组的第一个维度(奇数行)并更新指针`result[0][i++]`。
- 否则,如果它是偶数(`arr[k] % 2 == 0`),复制到第二个维度(偶数行)并更新指针`result[1][j++]`。
4. **排序**:
- 需要在填充结束后对每一行进行排序。可以使用标准库函数如`qsort()`来进行内建的快速排序或者其他选择排序算法,针对奇数行和偶数行分别进行。
5. **打印结果**:
- 最后,遍历并打印出排好序的`result`数组。
```c
#include <stdio.h>
#include <stdlib.h>
// 内部函数用于比较整数,以便排序
int compare(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
void separate_and_sort(int arr[], int N, int result[][N]) {
int i = 0, j = 0;
// 分离奇偶数
for (int k = 0; k < N; ++k) {
if (arr[k] % 2 == 1) {
result[0][i++] = arr[k];
} else {
result[1][j++] = arr[k];
}
}
// 排序奇数和偶数行
qsort(result[0], i, sizeof(int), compare);
qsort(result[1], j, sizeof(int), compare);
// 输出结果
printf("奇数:\n");
for (int k = 0; k < i; ++k) {
printf("%d ", result[0][k]);
}
printf("\n偶数:\n");
for (int k = 0; k < j; ++k) {
printf("%d ", result[1][k]);
}
}
int main() {
int arr[] = {9, 2, 7, 4, 11, 6};
int N = sizeof(arr) / sizeof(arr[0]);
int result[2][N] = {-1, -1};
separate_and_sort(arr, N, result);
return 0;
}
```
阅读全文