用C语言解决将一维整型数组调整为左右两部分,左边所有元素均为奇数,右边所有元素均为偶数。 【输入】 第一行一个整数,表示该数组元素的个数;第二行n个整数,表示该数组的n个元素值。 【输出】 输出调整后的数组元素,每个元素后面用一个空格分隔,要求所有奇(偶)数相对位置不变。
时间: 2024-11-25 13:21:13 浏览: 25
在C语言中,你可以通过两个指针分别指向数组的头和尾,然后遍历整个数组,对奇数和偶数进行分类并交换。这里是简单的步骤:
1. **读取输入**:
- 首先读取数组长度 `n` 和一个一维整型数组 `arr[]`。
2. **初始化指针**:
- 创建两个指针 `left` 和 `right`,初始时指向数组的第一个元素(即索引0)和最后一个元素(即索引`n-1`)。
3. **遍历数组**:
- 当 `left < right` 时,进入循环:
- 检查 `arr[left]` 是否为奇数,如果是,则不动它,`left++`;
- 否则,检查 `arr[right]` 是否为偶数,如果是,则不动它,`right--`;
- 如果此时 `arr[left]` 是偶数而 `arr[right]` 是奇数,交换它们的位置,并更新 `left` 和 `right`。
4. **输出结果**:
- 一旦 `left >= right`,说明已经处理完了所有奇偶元素,可以直接遍历数组打印出来。注意,在输出前,要判断当前元素是否应保留原顺序(即左半部分的元素),还是应该按照新的奇偶分组。
5. **结束程序**:
- 结束循环后,程序退出。
下面是一个简化的伪代码示例:
```c
int main() {
int n, arr[100];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int left = 0, right = n - 1;
while (left < right) {
if (arr[left] % 2 != 0) { // 奇数
while (left < right && arr[right] % 2 == 0) { // 找到右侧第一个偶数
right--;
}
if (left < right) {
swap(&arr[left], &arr[right]); // 交换
}
left++;
} else { // 偶数
left++; // 直接向右移动
}
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 请注意,上述代码中 `swap()` 函数需要你自己实现,用于交换两个变量的值。
```
阅读全文