Удаление минимального элемента - C (СИ)
Формулировка задачи:
Дана последовательность из n элементов. Удалить из нее все вхождения минимального элемента, затем отсортировать ее по убыванию. Вывести на экран исходную последовательность до удаления, после удаления и после сортировки.
Решение задачи: «Удаление минимального элемента»
textual
Листинг программы
#include <bool.h>
#include <stdlib.h>
#include <stdio.h>
int find_min(int* arr, size_t siz) {
int min = *arr;
while (--siz != 0) {
arr++;
if (*arr < min) { min = *arr; }
}
return min;
}
void print_arr(int* arr, size_t siz, bool skip, int skipped) {
while (siz-- != 0) {
if (!skip || *arr != skipped) { printf("%d ", *arr); }
arr++;
}
putchar('\n');
}
int compare(const void* pa, const void* pb) {
int a = *(int*)pa;
int b = *(int*)pb;
return a > b ? -1 : a != b;
}
int main(void) {
int arr[] = { 1, 2, 1, 3, 4, 1 };
size_t siz = sizeof(arr) / sizeof(arr[0]);
print_arr(arr, siz, false, 0);
int min = find_min(arr, siz);
print_arr(arr, siz, true, min);
qsort(arr, siz, sizeof(int), compare);
print_arr(arr, siz, true, min);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
для булевого типа, для функций работы со стеком и для работы с консолью. - Задаём функцию find_min, которая ищет минимальный элемент в массиве.
- Создаём цикл, который проходит по всем элементам массива, начиная со второго.
- Передаём указатель на следующий элемент массива, увеличивая его на единицу.
- Сравниваем текущий элемент с минимальным значением. Если текущий элемент меньше, то обновляем значение минимального элемента.
- Возвращаем найденное минимальное значение.
- Создаём функцию print_arr, которая выводит элементы массива на экран.
- Если параметр skip равен false, то выводим текущий элемент массива на экран.
- Если параметр skip равен true, то пропускаем вывод текущего элемента массива.
- Увеличиваем указатель на следующий элемент массива.
- Если параметр skipped не равен текущему элементу, то выводим его на экран.
- Увеличиваем указатель на следующий элемент массива.
- Возвращаем 0.
- Создаём функцию compare, которая сравнивает два элемента массива.
- Возвращаем -1, если первый элемент больше второго, иначе возвращаем 0.
- В функции main создаём массив arr и определяем его размер siz.
- Выводим элементы массива на экран с помощью функции print_arr, где параметр skip равен false.
- Находим минимальный элемент массива с помощью функции find_min и сохраняем его в переменной min.
- Выводим элементы массива на экран с помощью функции print_arr, где параметр skip равен true, а параметр skipped равен минимальному значению.
- Сортируем массив с помощью функции qsort, передавая в неё размер массива, функцию сравнения и начальный адрес массива.
- Выводим отсортированный массив на экран с помощью функции print_arr, где параметр skip равен true, а параметр skipped равен минимальному значению.
- Возвращаем 0, завершая работу программы.