Упорядочить массив тремя способами - C (СИ)

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

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

Дан целочисленный массив (размер и элементы массива вводятся пользователем). Упорядочить массив тремя способами: в порядке возрастания значений элементов; в порядке убывания суммы цифр элементов; в порядке возрастания остатка от деления на 15 элементов. В функцию сортировки должен передаваться указатель на функцию сравнения двух элементов. Способ сортировки выбирает пользователь.

Решение задачи: «Упорядочить массив тремя способами»

textual
Листинг программы
#include "stdio.h"      // printf, putchar
#include "stdlib.h"     // qsort
 
#define N(a) (sizeof(a)/sizeof(a[0]))
 
int sum_digits(const int x)
{
    return x == 0? 0 : x % 10 + sum_digits(x / 10);
}
 
int compare_by_value(const void* const a, const void* const b)
{
    int aa = *(int*) a;
    int bb = *(int*) b;
    return aa < bb ? -1 : aa != bb;
}
 
int compare_by_mod15(const void* const a, const void* const b)
{
    int aa = *(int*) a % 15;
    int bb = *(int*) b % 15;
    return aa < bb ? -1 : aa != bb;
}
 
int compare_by_sum_digits(const void* const a, const void* const b)
{
    int aa = sum_digits(*(int*) a);
    int bb = sum_digits(*(int*) b);
    return aa > bb ? -1 : aa != bb;
}
 
void print_array(const int* arr, unsigned int siz)
{
    while( siz-- ) {
        printf("%d ", *arr++);
    }
    putchar('\n');
}
 
int main(void)
{
    int arr[] = { 1, 2, 22, 333, 4, 55, 6, 77, 888, 9999 };
 
    qsort(arr, N(arr), sizeof(int), compare_by_value);
    print_array(arr, N(arr));
 
    qsort(arr, N(arr), sizeof(int), compare_by_mod15);
    print_array(arr, N(arr));
 
    qsort(arr, N(arr), sizeof(int), compare_by_sum_digits);
    print_array(arr, N(arr));
 
    return 0;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h для функций вывода и ввода, stdlib.h для функции сортировки.
  2. Определяется макрос N, который используется для вычисления размера массива.
  3. Реализуется функция sum_digits, которая вычисляет сумму цифр числа.
  4. Реализуются три функции сравнения для использования в функции qsort: compare_by_value, compare_by_mod15, compare_by_sum_digits.
  5. Реализуется функция print_array для вывода массива на экран.
  6. В функции main создается массив arr, заполняется значениями и сортируется тремя способами с использованием разных функций сравнения.
  7. Выводится отсортированный массив после каждой сортировки.
  8. Программа возвращает 0, заканчивая свое выполнение.

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


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

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

8   голосов , оценка 3.5 из 5
Похожие ответы