c语言数组中偶数放左边,奇数放右边
时间: 2024-11-22 07:26:28 浏览: 27
在C语言中,如果你想将数组中的偶数放在数组的一端,奇数放在另一端,可以采用一种称为“荷兰国旗”排序( Dutch National Flag Problem)算法的思想。这个算法通过三个指针,分别指向开始、中间(所有偶数的位置)和结束(所有奇数之后),遍历数组并根据元素的奇偶性进行移动。
以下是简单的步骤:
1. 初始化三个指针,`i`(从头开始),`j`(初始位置在头和尾之间),`k`(指向数组结尾)。
2. 当 `i` 小于 `k` 时,进行循环:
- 检查当前元素 `arr[i]`:
- 如果是奇数,将其与 `arr[j]` 交换并将 `j++`。
- 如果是偶数,保持不变,因为 `j` 已经是偶数区间的右边界。
- 否则,如果 `i < k` 并且 `arr[k]` 是奇数,说明找到了下一个奇数,直接将 `k--`,因为 `k` 已经在正确的区域。
3. 完成循环后,`arr[0...j-1]` 区间包含所有偶数,`arr[j...k]` 区间包含所有奇数。
```c
void separateArray(int arr[], int size) {
int i = 0, j = 0, k = size - 1;
while (i <= k) {
if (arr[i] % 2 == 0) {
swap(&arr[i], &arr[j]);
j++;
} else if (arr[i] % 2 != 0 && i < k) {
k--;
}
i++;
}
}
```
阅读全文