Отсортируйте первую половину массива по возрастанию, а вторую по убыванию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Решите задачи данной группы, оформив решение в виде процедур генерации, вывода и обработки массивов. Предусмотрите в процедуре генерации массива ввод границ диапазона случайных чисел. Создайте целочисленный массив, содержащий 2n различных чисел. Отсортируйте первую половину массива по возрастанию, а вторую по убыванию. Выведите на экран, отсортированный таким образом массива

Решение задачи: «Отсортируйте первую половину массива по возрастанию, а вторую по убыванию»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void isort(int* _f, int* _l, int (*pcmp)(int, int));
  4. void array_print(FILE* _out, const int* _f, const int* _l);
  5.  
  6. int cmp_asc(int  a, int b) { return (a < b); }
  7. int cmp_desc(int a, int b) { return (a > b); }
  8.  
  9.  
  10. int main(void){
  11.     int a[10];
  12.     int i, n = 10;
  13.     for(i = 0; i < n; ++i)
  14.         a[i] = rand() % 10;
  15.  
  16.     array_print(stdout, a, a + n);
  17.     isort(a, a + (n / 2), &cmp_asc);
  18.     isort(a + (n / 2), a + n, &cmp_desc);
  19.     array_print(stdout, a, a + n);
  20.     return 0;
  21. }
  22.  
  23. //сортировка вставкой
  24. void isort(int* _f, int* _l, int (*pcmp)(int, int)){
  25.     int* p, *i, v;
  26.     if(_f >= _l)
  27.         return;
  28.  
  29.     for(p = _f + 1; p != _l; ++p){
  30.         v = *p;
  31.         i = p - 1;
  32.         while((i >= _f) && (*pcmp)(v, *i)){
  33.             *(i + 1) = *i;
  34.             --i;
  35.         }
  36.         *(i + 1) = v;
  37.     }
  38. }
  39.  
  40. //печать
  41. void array_print(FILE* _out, const int* _f, const int* _l){
  42.     for(; _f != _l; ++_f)
  43.         fprintf(_out, "%d ", *_f);
  44.     fputc('\n', _out);
  45. }

Объяснение кода листинга программы

  1. Создается массив из 10 элементов, заполненный случайными числами от 0 до 9.
  2. Функция array_print выводит массив на экран.
  3. Первая половина массива сортируется по возрастанию с помощью функции isort и сравнения a < b.
  4. Вторая половина массива сортируется по убыванию с помощью функции isort и сравнения a > b.
  5. Функция array_print снова выводит массив на экран.
  6. В конце программы возвращается 0, что означает успешное выполнение. В функции isort используется сортировка вставкой. Она проходит по массиву с начиная с первого элемента до последнего, каждый раз сравнивая текущий элемент с предыдущим. Если текущий элемент меньше предыдущего, они меняются местами. Эта процедура повторяется до тех пор, пока массив не будет полностью отсортирован. Функция array_print принимает указатель на файл, в который нужно вывести массив, и два указателя на начало и конец массива. Она проходит по всем элементам массива и выводит их на экран, добавляя пробел после каждого элемента. После вывода всех элементов она добавляет символ новой строки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы