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

















