用C语言设计将所有奇数移到所有偶数之前的算法。
时间: 2023-09-03 21:28:28 浏览: 109
### 回答1:
可以,以下是用C语言设计的将所有奇数移到所有偶数之前的算法:
```
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void move_odd_before_even(int arr[], int size) {
int left = 0;
int right = size - 1;
while (left < right) {
while (arr[left] % 2 != 0 && left < right) {
left++;
}
while (arr[right] % 2 == 0 && left < right) {
right--;
}
if (left < right) {
swap(&arr[left], &arr[right]);
}
}
}
int main() {
int arr[] = {2, 1, 4, 3, 6, 5, 8, 7};
int size = sizeof(arr) / sizeof(arr[0]);
move_odd_before_even(arr, size);
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个算法通过使用双指针来将数组中的奇数移到所有偶数之前。它遍历数组两端,左指针向右移动直到遇到偶数,右指针向左移动直到遇到奇数,然后交换两个指针所指的元素,直到两个指针相遇。
### 回答2:
以下是一种用C语言设计的算法,可以将所有奇数移到所有偶数之前:
1. 创建一个整型数组,用于存储奇数和偶数。
2. 通过循环,将数组中的元素从键盘输入或者随机生成,直到数组被填满。
3. 创建两个指针变量,一个指向数组开头(头指针),一个指向数组尾部(尾指针)。
4. 循环遍历整个数组:
- 如果头指针指向的元素是奇数,将头指针向后移动一位。
- 如果尾指针指向的元素是偶数,将尾指针向前移动一位。
- 如果头指针指向的元素是偶数,尾指针指向的元素是奇数,将两个元素进行交换,并将头指针向后移动一位,尾指针向前移动一位。
5. 重复步骤4直到头指针和尾指针相遇。
6. 输出调整后的数组。
这个算法的基本思想是通过两个指针,一个从数组的开头遍历,一个从数组的尾部遍历,同时不断交换奇数和偶数的位置,直到指针相遇为止。这样,所有的奇数将会在所有的偶数之前。
注意:实际编写代码的时候,可以根据具体的需求进行优化,例如可以在输入数据的时候就区分奇偶数,或者使用其他的数据结构来存储奇偶数等等。以上仅为一种基本的算法实现。
### 回答3:
算法如下:
1. 声明一个整数数组arr,并初始化该数组,包含一定数量的奇数和偶数。
2. 声明两个指针oddPtr和evenPtr,用来指向数组中的奇数和偶数。
3. 初始化oddPtr为数组的开头,evenPtr为数组的末尾。
4. 使用循环遍历数组,直到oddPtr和evenPtr相遇为止。
5. 在循环中,判断oddPtr指向的元素是否为奇数:
a. 如果是奇数,则oddPtr指针向后移动一位,跳过该元素。
b. 如果不是奇数,则判断evenPtr指向的元素是否为奇数:
i. 如果是奇数,则交换oddPtr和evenPtr指向的元素,并将oddPtr和evenPtr指针都向后移动一位。
ii. 如果不是奇数,则evenPtr指针向前移动一位,跳过该元素。
6. 循环结束后,所有的奇数都被移到了所有偶数之前。
示例代码如下:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void moveOddBeforeEven(int arr[], int size) {
int *oddPtr = arr; // 奇数指针
int *evenPtr = arr + size - 1; // 偶数指针
while (oddPtr < evenPtr) { // 当奇数指针和偶数指针相遇时结束
if (*oddPtr % 2 != 0) { // 如果奇数指针指向的元素是奇数
oddPtr++; // 奇数指针向后移动一位
} else { // 如果奇数指针指向的元素是偶数
if (*evenPtr % 2 != 0) { // 如果偶数指针指向的元素是奇数
swap(oddPtr, evenPtr); // 交换奇数指针和偶数指针所指向的元素
oddPtr++; // 奇数指针向后移动一位
}
evenPtr--; // 偶数指针向前移动一位
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(arr) / sizeof(arr[0]);
printf("移动前的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
moveOddBeforeEven(arr, size);
printf("移动后的数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
以上代码会输出:
移动前的数组:1 2 3 4 5 6 7 8 9 10
移动后的数组:9 7 5 3 1 6 4 8 2 10
阅读全文