要调整程序界面中的奇数和偶数,可以采用以下方法:
方法一:双指针遍历数组
确定思路
使用两个指针,一个从数组左端开始,一个从数组右端开始。
左指针遇到偶数就停下,右指针遇到奇数就停下。
当两个指针都停下时,交换它们所指向的元素。
继续移动指针,重复上述过程,直到左指针大于或等于右指针。
编写代码
```c
include
void switch_odd_even(int arr[], int size) {
int *left = arr;
int *right = arr + size - 1;
int temp;
while (left < right) {
// 左指针找偶数
while (*left % 2 != 0 && left < right) {
left++;
}
// 右指针找奇数
while (*right % 2 == 0 && left < right) {
right--;
}
// 交换奇数和偶数
if (left < right) {
temp = *left;
*left = *right;
*right = temp;
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr);
switch_odd_even(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
方法二:使用两个下标遍历
确定思路
定义两个下标 `left` 和 `right`,分别指向数组的起始位置和最后一个元素的位置。
从前往后找偶数,找到偶数后停止(即 `left` 右移)。
从后往前找奇数,找到奇数后停止(即 `right` 左移)。
当 `left` 和 `right` 都找到对应的数据时,交换它们所指向的元素。
重复上述过程,直到 `left` 大于或等于 `right`。
编写代码
```c
include
void switch_odd_even(int arr[], int size) {
int left = 0;
int right = size - 1;
int temp;
while (left < right) {
// 找偶数
while (left < right && arr[left] % 2 != 0) {
left++;
}
// 找奇数
while (left < right && arr[right] % 2 == 0) {
right--;
}
// 交换奇数和偶数
if (left < right) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr);
switch_odd_even(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
方法三:使用临时数组
确定思路
创建一个新数组,用于存放奇数和偶数。
遍历原数组,将奇数放入新数组,将偶数放入新数组。
将新数组中的元素拷贝回原数组。