Примерно так, но нужно поправить - мозг.
```
#include <stdio.h>
#include <stdlib.h> // gcc lr1.19.c -o lr1.19 -std=c99
int cmp(const void *a, const void *b)
{ // Четвёртый аргумент функции qsort — это имя функции,
return *(int *)a - *(int *)b; // которая умеет сравнивать два элемента массива.
}
void printArray(int arr[], int n) // функция вывода массива
{
int i;
for (i = 0; i < n; i++)
printf("[ %d ]", arr[i]);
}
int main()
{
int Enter, sum = 0;
int *Arr_max_min = malloc(sizeof(int)); // динамический массив для отрицательных чисел
int max_min = 0; // Максимальное из отрицательных
int *Arr_min_max = malloc(sizeof(int)); // динамический массив для положительных чисел
int min_max = 0; // Минимальное из положительных
int cell_all = 0; // суммарное количество цифр
int cell_max_min = 0; // суммарное количество отрицательных цифр
int cell_min_max = 0; // суммарное количество положительных цифр
do
{
printf("[%d] -> ", cell_all); // выводим номер ячейки
scanf("%d", &Enter);
sum += Enter; // Складываем числа.
cell_all++; //
if (Enter < max_min) // если введенное меньше 0
{ // Максимальное из отрицательных
cell_max_min++; // + ячейка
Arr_max_min[cell_max_min - 1] = Enter; // запись в ячейку введенного значения
Arr_max_min = realloc(Arr_max_min, sizeof(int) * (cell_max_min + 1));
}
if (Enter > min_max)
{ // Минимальное из положительных
cell_min_max++; // + ячейка
Arr_min_max[cell_min_max - 1] = Enter; // запись в ячейку введенного значения
Arr_min_max = realloc(Arr_min_max, sizeof(int) * (cell_min_max + 1));
}
} while (Enter != 0); // пока Enter не 0
// массив число ячеек ук.размера функция сравнения двух элементов
qsort(Arr_max_min, cell_max_min, sizeof(int), cmp);
qsort(Arr_min_max, cell_min_max, sizeof(int), cmp);
printf("\n");
printArray(Arr_max_min, cell_max_min);
printf(" ");
printArray(Arr_min_max, cell_min_max);
printf("\n");
printf("\n");
printf("Всего введено чисел включая завершающий [0]: %i\n", cell_all);
printf("Всего введено отрицательных чисел: %i\n", cell_max_min);
printf("Всего введено отрицательных чисел: %i\n", cell_min_max);
printf("Максимальное число из отрицательных: %d\n", Arr_max_min[0]);
printf("Минимальное число из положительных: %d\n", Arr_min_max[0]);
printf("Сумма всех чисел: %i\n", sum);
free(Arr_max_min); // очистим занимаемую память
free(Arr_min_max);
return 0; // отправим основной функции 0 - нет ошибки
}
/* Минимальное из положительных
Максимальное из отрицательных */
```