Отсортировать первую половину массива по возрастанию, а вторую - по убыванию - C (СИ)
Формулировка задачи:
Массив из 20 целых чисел заполняется случайными числами от -100 до 100, отсортировать его первую половину по возрастанию, а вторую- по убыванию и вывести на экран.
Помогите пожалуйста.
Решение задачи: «Отсортировать первую половину массива по возрастанию, а вторую - по убыванию»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 20
//сортировка вставками
void isort(int arr[], int first, int last, int (*cmp)(int,int)){
int v, i, j;
for(i = first + 1; i < last; ++i){
v = arr[i];
j = i;
while((j > first) && (*cmp)(v, arr[j - 1])){
arr[j] = arr[j - 1];
--j;
}
arr[j] = v;
}
}
static int cmp_asc(int a, int b) { return (a < b); }
static int cmp_desc(int a, int b) { return (a > b); }
int main(void){
int i, arr[N];
srand((unsigned int)time(NULL));
for(i = 0; i < N; ++i)
arr[i] = -100 + rand() % 201;
//сортируем по возрастанию
isort(arr, 0, N / 2, &cmp_asc);
//сортируем по убыванию
isort(arr, N / 2, N, &cmp_desc);
for(i = 0; i < N; ++i)
printf("%d ", arr[i]);
getchar();
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с массивами и временем
- Определение размера массива N
- Функция isort для сортировки массива вставками
- Статические функции сравнения для сортировки по возрастанию и убыванию
- Инициализация массива случайными числами
- Сортировка первой половины массива по возрастанию
- Сортировка второй половины массива по убыванию
- Вывод отсортированного массива на экран
- Получение ввода от пользователя для завершения работы программы
- Возвращение 0 для успешного завершения программы