用C语言将数组中的奇数排在数组前半部,偶数排在数组后半部。 【输入形式】数组元素个数 数组各元素值 【输出形式】调整位置之后的各数组元素,元素之间以一个空格分割
时间: 2024-11-09 11:20:01 浏览: 24
在C语言中,我们可以使用两个指针,一个指向数组的起始位置,另一个指向数组的中间位置。遍历数组,如果遇到偶数,就将其移动到数组后半部;如果遇到奇数,就保持不动。以下是详细的步骤实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 帮助函数,交换数组中的两个元素
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort_odd_even(int arr[], int n) {
int i = 0, j = n / 2, temp;
while (i < j) {
// 如果左指针处的元素是偶数,与右指针处交换
if (arr[i] % 2 == 0) {
swap(&arr[i], &arr[j]);
} else {
i++; // 左指针向右移动
}
// 如果右指针处的元素是奇数,无需交换,直接移动左指针
if (arr[j] % 2 != 0) {
j--;
} else {
j--; // 右指针向左移动
}
}
}
void print_array(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int n;
printf("请输入数组的元素个数: ");
scanf("%d", &n);
int* arr = malloc(n * sizeof(int)); // 动态分配内存
printf("请输入数组的元素(以空格分隔): ");
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sort_odd_even(arr, n);
print_array(arr, n);
free(arr); // 释放动态分配的内存
return 0;
}
阅读全文