Отсортируйте первую половину массива по возрастанию, а вторую по убыванию - 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 принимает указатель на файл, в который нужно вывести массив, и два указателя на начало и конец массива. Она проходит по всем элементам массива и выводит их на экран, добавляя пробел после каждого элемента. После вывода всех элементов она добавляет символ новой строки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д