Скачиваний:
1
Добавлен:
22.09.2026
Размер:
94 Кб
Скачать
☆

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Дисциплина: «Алгоритмы и структуры данных»

Лабораторная работа №1.

Выполнил: Студент группы ИКПИ-41

Летягина Е. А.

Проверил: Кандидат технических наук, доцент кафедры ПИиВТ

Дагаев А. В.

г. Санкт-Петербург

  1. Описание алгоритмов

Для сравнения были выбраны два алгоритма сортировки: сортировка вставками и сортировка слиянием.

Сортировка вставками:

Суть этого метода сортировки заключается в последовательной вставке каждого элемента несортированного списка на его правильное место в отсортированной части списка.

Временная сложность:

  • В лучшем случае O(n), если список уже отсортирован;

  • В среднем случае O(n2), если список упорядочен случайным образом;

  • В худшем случае O(n2), если список упорядочен в обратном порядке.

Сортировка слиянием:

Алгоритм работает по принципу рекурсивного разделения входного массива на две половины, рекурсивной сортировки этих двух половин и последующего их объединения для получения отсортированного массива.

Временная сложность:

  • В лучшем случае O(n log n), когда массив уже отсортирован или почти отсортирован;

  • В среднем случае O(n log n), когда массив упорядочен случайным образом;

  • В худшем случае O(n log n), когда массив отсортирован в обратном порядке.

  1. Описание программы

Программа предназначена для сравнения времени выполнения двух алгоритмов сортировки: сортировки вставками и сортировки слиянием. Измерение производится многократным запуском алгоритмов с последующим усреднением времени для повышения точности.

В программе используются константные значения N для размера массива и NN для количества повторений каждого алгоритма для усреднения.

Функции программы:

  • int rrand(int range_min, int range_max) - Генерирует случайное целое число в заданном диапазоне с помощью rand().

  • void sort_inserts(int x[], int n) - Реализует сортировку вставками. Двойным циклом проходится по массиву, перемещая текущий элемент влево, пока он меньше предыдущего (используется swap).

  • void mergeSort(int list[], int start, int end) - Рекурсивно делит массив на две половины и вызывает слияние.

  • void merge(int list[], int start, int end, int mid) - Сливает две отсортированные половины массива с использованием временного массива mergedList[N]. Элементы сравниваются и помещаются во временный массив, затем копируются обратно.

  • void print_array(int arr[], int size) - Выводит первые size элементов массива на экран.

Основные шаги в функции main():

  1. Инициализация генератора случайных чисел srand().

  2. Заполнение исходного массива orig случайными числами от -2000 до 2000.

  3. Вывод первых 20 элементов исходного массива.

  4. Измерение времени чистого копирования (без сортировки) для последующего вычитания накладных расходов. Выполняется NN раз.

  5. Измерение времени сортировки вставками: цикл из NN итераций, каждая включает копирование исходного массива в рабочий и вызов sort_inserts. Вычитается время копирования, затем результат делится на NN – получается среднее время одной сортировки.

  6. Вывод 20 первых элементов отсортированного массива.

  7. Аналогично для сортировки слиянием с вызовом mergeSort(work, 0, N-1).

  8. Результаты выводятся на экран в миллисекундах с шестью знаками после запятой.

Программа для исследования алгоритмов сортировки написана на языке C++ с использованием стандартной библиотеки, что обеспечивает эффективность и кроссплатформенность. В качестве среды разработки использовалась Visual Studio Code, предлагающая удобные инструменты для написания кода и отладки. Программа не использует сторонних библиотек, что делает её легковесной и простой для запуска на различных платформах.

Соседние файлы в папке Отчёты Дагаев