实验二: 数组a中存放了10个正整数,要求调用函数将数组a中的数重新排列。排列的方法是将偶数放在数组的左部,奇数放在数组的右部。 例如: 原数组:21 34 224 25 367 41 736 37 42 456重排后:34 224 736 42 456 37 41 367 25 21。c语言
时间: 2024-02-24 12:00:39 浏览: 146
好的,这是一个简单的数组操作问题。可以按照以下步骤来解决:
1. 定义一个函数,接收一个整数数组和数组的长度作为参数。
2. 定义两个指针,一个指向数组的开头,一个指向数组的结尾。
3. 从开头开始遍历数组,如果遇到偶数就继续向后移动指针,直到找到奇数。
4. 从结尾开始遍历数组,如果遇到奇数就继续向前移动指针,直到找到偶数。
5. 如果找到了奇数和偶数,则交换它们的位置,继续执行步骤3和4,直到指针相遇。
6. 函数返回排序后的数组。
下面是示例代码:
```c
#include <stdio.h>
void reorder(int a[], int len) {
int *p1 = a;
int *p2 = a + len - 1;
while (p1 < p2) {
while (p1 < p2 && *p1 % 2 == 0) p1++;
while (p1 < p2 && *p2 % 2 == 1) p2--;
if (p1 < p2) {
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
}
}
int main() {
int a[] = {21, 34, 224, 25, 367, 41, 736, 37, 42, 456};
int len = sizeof(a) / sizeof(int);
reorder(a, len);
for (int i = 0; i < len; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
输出结果为:34 224 736 42 456 37 41 367 25 21
阅读全文