Отсортируйте первую половину массива по возрастанию, а вторую по убыванию - C (СИ)
Формулировка задачи:
Решите задачи данной группы, оформив решение в виде процедур генерации,
вывода и обработки массивов. Предусмотрите в процедуре генерации
массива ввод границ диапазона случайных чисел.
Создайте целочисленный массив, содержащий 2n различных чисел.
Отсортируйте первую половину массива по возрастанию, а вторую по
убыванию. Выведите на экран, отсортированный таким образом массива
Решение задачи: «Отсортируйте первую половину массива по возрастанию, а вторую по убыванию»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void isort(int* _f, int* _l, int (*pcmp)(int, int)); void array_print(FILE* _out, const int* _f, const int* _l); int cmp_asc(int a, int b) { return (a < b); } int cmp_desc(int a, int b) { return (a > b); } int main(void){ int a[10]; int i, n = 10; for(i = 0; i < n; ++i) a[i] = rand() % 10; array_print(stdout, a, a + n); isort(a, a + (n / 2), &cmp_asc); isort(a + (n / 2), a + n, &cmp_desc); array_print(stdout, a, a + n); return 0; } //сортировка вставкой void isort(int* _f, int* _l, int (*pcmp)(int, int)){ int* p, *i, v; if(_f >= _l) return; for(p = _f + 1; p != _l; ++p){ v = *p; i = p - 1; while((i >= _f) && (*pcmp)(v, *i)){ *(i + 1) = *i; --i; } *(i + 1) = v; } } //печать void array_print(FILE* _out, const int* _f, const int* _l){ for(; _f != _l; ++_f) fprintf(_out, "%d ", *_f); fputc('\n', _out); }
Объяснение кода листинга программы
- Создается массив из 10 элементов, заполненный случайными числами от 0 до 9.
- Функция array_print выводит массив на экран.
- Первая половина массива сортируется по возрастанию с помощью функции isort и сравнения a < b.
- Вторая половина массива сортируется по убыванию с помощью функции isort и сравнения a > b.
- Функция array_print снова выводит массив на экран.
- В конце программы возвращается 0, что означает успешное выполнение. В функции isort используется сортировка вставкой. Она проходит по массиву с начиная с первого элемента до последнего, каждый раз сравнивая текущий элемент с предыдущим. Если текущий элемент меньше предыдущего, они меняются местами. Эта процедура повторяется до тех пор, пока массив не будет полностью отсортирован. Функция array_print принимает указатель на файл, в который нужно вывести массив, и два указателя на начало и конец массива. Она проходит по всем элементам массива и выводит их на экран, добавляя пробел после каждого элемента. После вывода всех элементов она добавляет символ новой строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д