Отсортируйте первую половину массива по возрастанию, а вторую по убыванию - 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);
}

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

  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
Похожие ответы