用C语言实现给定N个整数,要求对这N个整数排序,偶数排在奇数前面,再从大到小排序
``
#include <stdio.h>
#include <stdlib.h>
int main() {
int N,i,j,temp;
printf("请输入整数个数 N:");
scanf("%d", &N);
// 动态分配数组
int *numbers = (int *)malloc(N * sizeof(int));
if (numbers == NULL) {
printf("内存分配失败。\n");
return -1;
}
// double *a = (double *)malloc(size * sizeof(double));//malloc 动态分配数组
// 输入整数
printf("请输入 %d 个整数:", N);
for ( i = 0; i < N; i++) {
scanf("%d", &numbers[i]);
}
// 分离偶数和奇数
int *even = (int *)malloc(N * sizeof(int));
int *odd = (int *)malloc(N * sizeof(int));
int evenCount = 0, oddCount = 0;
for ( i = 0; i < N; i++) {
if (numbers[i] % 2 == 0) {
even[evenCount++] = numbers[i];
} else {
odd[oddCount++] = numbers[i];
}
}
// 对偶数数组进行从大到小排序
for ( i = 0; i < evenCount; i++) {
for ( j = i + 1; j < evenCount; j++) {
if (even[j] > even[i]) {
temp = even[i];
even[i] = even[j];
even[j] = temp;
}
}
}
// 对奇数数组进行从大到小排序
for ( i = 0; i < oddCount; i++) {
for ( j = i + 1; j < oddCount; j++) {
if (odd[j] > odd[i]) {
int temp = odd[i];
odd[i] = odd[j];
odd[j] = temp;
}
}
}
// 输出排序后的结果
printf("排序后的数组:");
for ( i = 0; i < evenCount; i++) {
printf("%d ", even[i]);
}
for ( i = 0; i < oddCount; i++) {
printf("%d ", odd[i]);
}
printf("\n");
// 释放动态分配的内存
free(numbers);
free(even);
free(odd);
return 0;
}