Составьте программу формирования из массива А (N) двух массивов, в которых первый массив заполнен отрицательными, а второй положительными элементами. и отсортировать первый по убыванию, второй по возрастанию. на языке С
Ответы
Ответ:
#include <stdio.h>
#include <stdlib.h>
void separateAndSort(int* A, int N, int** negative, int** positive) {
// Allocate memory for the two arrays
*negative = (int*)malloc(N * sizeof(int));
*positive = (int*)malloc(N * sizeof(int));
int negativeCount = 0;
int positiveCount = 0;
for (int i = 0; i < N; i++) {
if (A[i] < 0) {
(*negative)[negativeCount++] = A[i];
} else {
(*positive)[positiveCount++] = A[i];
}
}
// Reallocate memory to free unused space
*negative = (int*)realloc(*negative, negativeCount * sizeof(int));
*positive = (int*)realloc(*positive, positiveCount * sizeof(int));
// Sort the negative array in descending order
for (int i = 0; i < negativeCount - 1; i++) {
for (int j = i + 1; j < negativeCount; j++) {
if ((*negative)[i] < (*negative)[j]) {
int temp = (*negative)[i];
(*negative)[i] = (*negative)[j];
(*negative)[j] = temp;
}
}
}
// Sort the positive array in ascending order
for (int i = 0; i < positiveCount - 1; i++) {
for (int j = i + 1; j < positiveCount; j++) {
if ((*positive)[i] > (*positive)[j]) {
int temp = (*positive)[i];
(*positive)[i] = (*positive)[j];
(*positive)[j] = temp;
}
}
}
}
int main() {
int A[] = {-3, 4, -1, 2, -2, 8, -5};
int N = sizeof(A) / sizeof(A[0]);
int* negative;
int* positive;
separateAndSort(A, N, &negative, &positive);
printf("Negative array: ");
for (int i = 0; i < sizeof(negative) / sizeof(negative[0]); i++) {
printf("%d ", negative[i]);
}
printf("\nPositive array: ");
for (int i = 0; i < sizeof(positive) / sizeof(positive[0]); i++) {
printf("%d ", positive[i]);
}
free(negative);
free(positive);
return 0;
}
Объяснение: