将整数数组A[0..n],将其分为两部分,左边所有元素为奇数,右边所有元素为偶数。数组元素个数不超过1000。【输入形式】 以逗号隔开的所有元素 【输出形式】 依次打印调整后的数组元素,元素间以逗号隔开。奇数序列和偶数序列分别按原序列中的顺序依次输出C语言数据结构
时间: 2024-09-13 13:19:23 浏览: 54
这是一个数组重新排序的问题,可以通过双指针技巧在一次遍历中完成。具体算法如下:
1. 初始化两个指针,left指向数组的开始位置,right指向数组的末尾位置。
2. 从左到右遍历数组,当left指针指向的元素为偶数时,与right指针指向的元素交换,同时right指针向左移动一位。
3. 交换后,因为偶数被移动到了数组的右侧,所以left指针可以继续向右移动。
4. 重复步骤2和3,直到left指针超过right指针。
5. 此时,数组的左侧全部为奇数,右侧全部为偶数。
下面是C语言的实现代码示例:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void rearrangeArray(int *A, int n) {
int left = 0, right = n - 1;
while (left < right) {
if (A[left] % 2 == 0) {
swap(&A[left], &A[right]);
right--;
} else {
left++;
}
}
}
int main() {
int A[1000], n;
// 输入数组长度和数组元素,以空格分隔
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
rearrangeArray(A, n);
// 打印调整后的数组
for (int i = 0; i < n; i++) {
printf("%d", A[i]);
if (i < n - 1) {
printf(",");
}
}
return 0;
}
```
该程序首先读取数组的长度和数组元素,然后调用`rearrangeArray`函数进行重新排序,最后按照要求格式输出结果。
阅读全文