输入一个整数n和n个各不相等的整数,将这些整数从小到大进行排序,要求奇数在前,偶数在后。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入一个整数n(1<n<100),再输入n个整数。用c语言编写出
时间: 2024-05-21 11:11:42 浏览: 267
以下是 C 语言程序实现:
#include <stdio.h>
// 判断是否为偶数
int isEven(int x) {
return x % 2 == 0; // 对 2 取余为 0 即为偶数
}
// 快速排序
void quickSort(int arr[], int left, int right) {
if (left >= right) return;
int i = left, j = right;
int pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) j--;
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) i++;
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
int t; // 测试数据组数
scanf("%d", &t);
while (t--) {
int n; // 数字总数
scanf("%d", &n);
int nums[n]; // 数字数组
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
// 将奇数排在前面,偶数排在后面
int left = 0, right = n - 1;
while (left < right) {
// 从左往右找到第一个偶数
while (left < right && !isEven(nums[left])) {
left++;
}
// 从右往左找到第一个奇数
while (left < right && isEven(nums[right])) {
right--;
}
if (left < right) {
// 交换两个数的位置
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
// 对奇数部分和偶数部分分别进行快速排序
quickSort(nums, 0, left - 1);
quickSort(nums, left, n - 1);
// 输出排序后的数组
for (int i = 0; i < n; i++) {
printf("%d ", nums[i]);
}
printf("\n");
}
return 0;
}
阅读全文