#include <stdio.h>
#include <stdlib.h>
// 统计奇数和偶数的个数
void CountEvensAndOdds(int arr[], int length, int* evensCount, int* oddsCount) {
*evensCount = 0;
*oddsCount = 0;
for (int i = 0; i < length; i++) {
if (arr[i] % 2 == 0) {
(*evensCount)++;
} else {
(*oddsCount)++;
}
}
}
// 将奇数和偶数分离到两个新数组中
void Partition(int arr[], int length, int** oddsArray, int* oddsLength, int** evensArray, int* evensLength) {
int oddsCount, evensCount;
CountEvensAndOdds(arr, length, &evensCount, &oddsCount);
*oddsLength = oddsCount;
*evensLength = evensCount;
*oddsArray = (int*)malloc(oddsCount * sizeof(int));
*evensArray = (int*)malloc(evensCount * sizeof(int));
int oddsIndex = 0;
int evensIndex = 0;
for (int i = 0; i < length; i++) {
if (arr[i] % 2 == 0) {
(*evensArray)[evensIndex++] = arr[i];
} else {
(*oddsArray)[oddsIndex++] = arr[i];
}
}
}
int main() {
int length;
scanf("%d", &length);
int* arr = (int*)malloc(length * sizeof(int));
for (int i = 0; i < length; i++) {
scanf("%d", &arr[i]);
}
int* oddsArray;
int oddsLength;
int* evensArray;
int evensLength;
Partition(arr, length, &oddsArray, &oddsLength, &evensArray, &evensLength);
for (int i = 0; i < oddsLength; i++) {
printf("%d ", oddsArray[i]);
}
printf("\n");
for (int i = 0; i < evensLength; i++) {
printf("%d ", evensArray[i]);
}
printf("\n");
free(arr);
free(oddsArray);
free(evensArray);
return 0;
}
以上代码中使用了动态内存分配函数malloc来创建奇数和偶数数组,因此在程序结束时需要使用free函数释放分配的内存空间,以避免内存泄漏。