C语言编写程序代码,实现: 1、将整型数组中的数据元素进行排序:奇数 在左边,偶数在右边。 2、数组元素可从键盘输入,也可随机生成。
时间: 2024-12-24 09:39:13 浏览: 50
在C语言中,我们可以使用经典的分治策略,即快速排序算法来对整型数组进行奇偶数分离排序。首先,我们需要创建一个函数来判断元素是否为奇数,然后结合快速排序的思想,对奇数和偶数分别进行排序。以下是实现这个功能的一个基本步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 判断一个整数是否为奇数
int is_odd(int num) {
return num % 2 != 0;
}
// 快速排序辅助函数,用于奇数和偶数部分
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void quick_sort_odd_even(int arr[], int low, int high) {
if (low < high) {
// 找到中间索引,奇数放在左边,偶数放在右边
int pivot_index = partition(arr, low, high);
// 对左右两部分递归进行排序
quick_sort_odd_even(arr, low, pivot_index - 1); // 排序奇数
quick_sort_odd_even(arr + pivot_index + 1, pivot_index + 1, high); // 排序偶数
}
}
// 分区函数,返回基准值的最终位置
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 假设最后一个元素为基准
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (is_odd(arr[j])) { // 如果是奇数
i++; // 移动指针
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
// 主函数,用户输入或随机生成并排序数组
int main() {
int n;
printf("Enter the number of elements or press 'r' for random: ");
scanf("%d", &n);
if (n == 'r') {
srand(time(0)); // 初始化随机种子
int arr[n];
for (int i = 0; i < n; i++) {
arr[i] = rand() % 100; // 随机生成0-99之间的整数
}
} else {
int arr[n];
for (int i = 0; i < n; i++) {
printf("Enter element %d: ", i+1);
scanf("%d", &arr[i]);
}
}
quick_sort_odd_even(arr, 0, n - 1);
printf("Sorted array with odd numbers on left and even numbers on right:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
阅读全文
相关推荐


















