
Отчёт_2
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение
высшего образования
«Национальный исследовательский Томский политехнический университет»
Инженерная школа информационных технологий и робототехники
Отделение автоматизации и робототехники
Направление: 15.03.04 – Автоматизация технологических процессов и производств
Отчёт по лабораторной работе № 2
по дисциплине «Основы программирования и алгоритмизации»
«Сравнительный анализ эффективности алгоритмов сортировки
массивов данных»
вариант № 13
Выполнил:
Студент группы 8Т41 Кирильцева К. М.
Проверил:
Ассистент ________________ Кургинов Я. О.
Томск 2024
Цель работы:
Целью данной лабораторной работы является сравнительный анализ эффективности различных алгоритмов сортировки массивов данных. В рамках работы будут рассмотрены такие алгоритмы, как Пузырьковая сортировка, Сортировка выбором, Быстрая сортировка и Сортировка слиянием. Студенты должны будут реализовать эти алгоритмы на выбранном языке программирования и оценить их производительность на разных типах входных данных, включая случайные массивы, уже отсортированные массивы и массивы с повторяющимися элементами.
Задание:
№ |
Формулировка |
1. |
Пузырьковая сортировка (Bubble Sort) |
2. |
Сортировка выбором (Selection sort) |
3. |
Сортировка подсчётом (Counting Sort) |
Анализ асимптотической сложности и эффективности алгоритмов:
Пузырьковая сортировка (Bubble Sort)
Преимущества:
Алгоритм легко написать и понять.
Сохраняет порядок элементов с одинаковыми ключами.
Не требует доп. памяти.
Недостатки:
В среднем и худшем случаях время работы составляет [O(n2)], что является неэффективным для сортировки больших массивов.
Если массив частично отсортирован, алгоритм может выполнять много лишних операций.
Сортировка выбором (Selection Sort)
Преимущества:
Простота реализации — легко понять и реализовать даже новичкам.
Не требует дополнительной памяти — работает in-place, не нуждается в дополнительных структурах данных.
Предсказуемое поведение — количество сравнений не зависит от изначального порядка элементов.
Недостатки:
Низкая производительность — время выполнения всегда O(n2), независимо от начального порядка.
Непрактична для больших массивов — из-за квадратичной сложности сильно проигрывает другим алгоритмам.
Неустойчива — не сохраняет относительный порядок одинаковых элементов (может быть важно при работе с объектами).
Сортировка подсчётом (Counting Sort)
Преимущества:
Очень быстрая для целых чисел в ограниченном диапазоне — работает за O(n+k), где k — диапазон значений.
Стабильная сортировка — сохраняет порядок элементов с одинаковыми значениями.
Отлично подходит для сортировки по ключу (например, сортировка по возрасту в списке людей).
Недостатки:
Требует дополнительной памяти — создаются вспомогательные массивы для подсчёта.
Не универсальна — работает только с целыми числами (или может быть адаптирована для дискретных значений), неприменима для вещественных чисел или объектов без ключа-счётчика.
Неэффективна при большом диапазоне значений — если максимальное значение велико, память и производительность падают.
Блок схемы:
Блок схема основного кода представлена на рисунке 1.
Рисунок 1- Блок схема основного кода.
Блок схема функции bubble представлена на рисунке 2.
Рисунок 2 - Блок схема функции bubble.
Блок схема функции selectionSort представлена на рисунке 3.
Рисунок 3 - Блок схема функции selectionSort
Блок схема функции countingSort представлена на рисунке 4.
Рисунок 4 - Блок схема функции countingSort
Блок схема функции printArray представлена на рисунке 5.
Рисунок 5 - Блок схема функции printArray.
Результат пузырьковой сортировки показан на рисунке 6:
Рисунок 6 - Результат пузырьковой сортировки
Результат сортировки выбором показан на рисунке 7:
Рисунок 7 - Результат сортировки выбором
Результат сортировки подсчётом показан на рисунке 8:
Рисунок 8 - Результат сортировки подсчётом
Вывод:
Выполнив задание лабораторной работы, научились сортировать массивы, используя различные виды сортировок на языке C++. Ознакомились с принципами работы пузырьковой сортировки, сортировки выбором и сортировки подсчётом, а также провели сравнительный анализ их эффективности и применимости.
Итоговое сравнение:
Пузырьковая сортировка и сортировка выбором — простые в реализации алгоритмы, подходящие для обучения и работы с небольшими массивами. Однако они обладают низкой производительностью и неэффективны для обработки больших объёмов данных. Сортировка подсчётом демонстрирует высокую скорость при сортировке целочисленных массивов с ограниченным диапазоном значений, но требует дополнительной памяти и не применима для всех типов данных.
Приложение A.
(Обязательный)
Листинги программ
Листинг 1 – Код всех функций, использующихся в задании
|
Продолжение Листинга 1
|
Листинг 2 – Код основного файла, для выбора типа сортировки
|
Продолжение Листинга 2
|
Продолжение Листинга 2
|