Упорядочить массив тремя способами - 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
stdio.h
для функций вывода и ввода,stdlib.h
для функции сортировки. - Определяется макрос N, который используется для вычисления размера массива.
- Реализуется функция sum_digits, которая вычисляет сумму цифр числа.
- Реализуются три функции сравнения для использования в функции qsort: compare_by_value, compare_by_mod15, compare_by_sum_digits.
- Реализуется функция print_array для вывода массива на экран.
- В функции main создается массив arr, заполняется значениями и сортируется тремя способами с использованием разных функций сравнения.
- Выводится отсортированный массив после каждой сортировки.
- Программа возвращает 0, заканчивая свое выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д