C语言实现调整数组使奇数全部都位于偶数前面
时间: 2023-04-07 15:03:03 浏览: 124
这是一个技术问题,我可以回答。可以使用双指针法,一个指针从数组头开始,一个指针从数组尾开始,分别向中间移动,当左指针指向偶数,右指针指向奇数时,交换两个数的位置,直到两个指针相遇。这样就可以实现将奇数全部都位于偶数前面。
相关问题
调整数组使奇数全部都位于偶数前面 C语言代码
下面是一个例子,使用双指针方法将奇数移动到数组前面,偶数移动到数组后面:
```
void reorder_array(int *array, int length) {
if (array == NULL || length <= 1) {
return; // invalid input
}
int left = 0, right = length - 1;
while (left < right) {
while (left < right && (array[left] & 1) != 0) {
left++; // find the first even number from left to right
}
while (left < right && (array[right] & 1) == 0) {
right--; // find the first odd number from right to left
}
if (left < right) {
// swap the even and odd numbers
int temp = array[left];
array[left] = array[right];
array[right] = temp;
}
}
}
```
这个函数接受一个整数数组和数组长度作为参数,并将数组中的所有奇数移动到数组前面,所有偶数移动到数组后面。
用C语言编译代码,要求调整数组使奇数全部都位于偶数前面
可以双指针法来实现将数组中的奇数放到偶数前面,具体步骤如下:
1. 定义两个指针i和j,分别指向数组的开头和结尾。
2. 循环遍历数组,当i<j时执行以下步骤:
- 如果a[i]为奇数,i指针向右移动一位;
- 如果a[j]为偶数,j指针向左移动一位;
- 如果a[i]为偶数且a[j]为奇数,交换a[i]和a[j]的值,然后i指针向右移动一位,j指针向左移动一位。
3. 循环结束后,数组中奇数都位于偶数前面。
以下是代码示例:
```c
#include <stdio.h>
void adjustArray(int a[], int n) {
int i = 0, j = n - 1;
while (i < j) {
if (a[i] % 2 != 0) {
i++;
} else if (a[j] % 2 == 0) {
j--;
} else {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
}
int main() {
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(a) / sizeof(int);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
adjustArray(a, n);
printf("\nAdjusted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
return 0;
}
```
输出结果为:
```
Original array: 1 2 3 4 5 6 7 8 9
Adjusted array: 1 9 3 7 5 6 4 8 2
```
阅读全文