Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба по сортировкам - 3 сем АИСД .docx
Скачиваний:
4
Добавлен:
08.07.2025
Размер:
2 Мб
Скачать
☆

Лучший случай:

2. Средний случай:

3. Худший случай:

5) Графики функции временной сложности для разных случаев

Рисунок 1.7 - Временная сложность сортировки с последовательностью Пратта в трех случаях.

  1. Быстрая сортировка

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

В массиве выбирается опорный элемент (в представленном алгоритме выбирается элемент с индексом в два раза меньше длины массива). Остальные элементы массива сравниваются с опорным и те, которые меньше него, ставятся слева от него, а которые больше или равны — справа. Для двух получившихся блоков массива операции повторяются, пока в блоке не останется один элемент.

  1. Устойчивость сортировки

При разбиении массива относительно опорного элемента равные элементы могут быть расположены в произвольном порядке, что приводит к изменению их первоначального порядка.

  1. Функция временной сложности и её асимптотическая оценка

Лучший случай:

Мы делим массив пополам на подмассивы до момента, пока подмассив не разделится на два отдельных элемента.

Общее уравнение

=

Рассмотрим, как происходит деление на первых трех уровнях:

Первый уровень:

Второй уровень:

Подставим это в первое уравнение:

Третий уровень:

Подставим это в первое уравнение и получим:

Можем заметить, что 8 при T(n) и 8 в знаменателе равны третьей степени двойки. Получим общую формулу:

В случае, когда подмассив разделился на два отдельных элемента (подмассивы длиной 1), временная сложность получается

Отсюда следует

Подставим в общую формулу:

Таким образом, временная сложность:

Асимптотическая сложность:

Средний случай:

Предположим, что во время выполнения сортировки массив длиной разделяется на две части в соотношении 1:3. Составим рекуррентное уравнение:

Развернем его:

При дальнейшем разбиении массива временная сложность не будет меняться и будет равна .

При разбиении на несколько уровней (примерно раз), получим:

Таким образом, асимптотическая сложность:

Худший случай:

В худшем случае во время сортировки массив каждый раз разделяется на две части: массив длиной 1 и массив длиной n-1.

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

Развернем его, подставив :

Ещё раз развернем:

Развертывая уравнение до конца, получим:

Поскольку , а сумма от 2 до — это арифметическая прогрессия:

Таким образом, асимптотическая сложность:

  1. Функция пространственной сложности и её асимптотическая оценка

Быстрая сортировка использует стек вызовов для хранения информации о рекурсивных вызовах. В лучшем и среднем случаях глубина рекурсии составляет , но в худшем случае (когда массив делится на подмассивы длиной 1 и ) она может достигать . Так как возрастает быстрее , поэтому пространственная сложность данной сортировки:

  1. График функции временной сложности для разных случаев

Рисунок 1.8 - Временная сложность быстрой сортировки в трех случаях (лучший случай совпал со средним).

  1. Пирамидальная сортировка

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

Сначала из неотсортированного массива создается куча. Это делается так, чтобы каждый родительский элемент был больше своих дочерних элементов. В результате получается "пирамидальная" структура. После того как куча построена, самый большой элемент находится на вершине кучи. Этот элемент перемещается в конец массива. После удаления элемента из кучи оставшаяся часть массива снова преобразуется в кучу. Процесс повторяется, пока все элементы не будут перемещены в отсортированный массив.

  1. Устойчивость сортировки

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

  1. Функция временной сложности и её асимптотическая оценка

Лучший случай:

Средний случай:

Худший случай:

  1. Функция пространственной сложности и её асимптотическая оценка

Алгоритм разработан на месте, и для выполнения задачи не требуется никакой дополнительной или временной памяти. Поэтому, пространственная сложность данного алгоритма:

  1. График функции временной сложности для разных случаев

Так как функции временной сложности для всех трех случаев совпадают, ниже будет представлен один график для лучшего, среднего и худшего случая.

Рисунок 1.9 - Временная сложность пирамидальной сортировки в лучшем, среднем и худшем случаях (все они совпали).

Поместим графики функций временной сложности в среднем случае на одно изображение.

Рисунок 1.10 - Временная сложность сортировок в средних случаях.

Рассмотрев график, мы видим, что наибыстрейшей сортировкой является сортировка Шелла с последовательностью Пратта. Также меньше времени занимают пирамидальная сортировка и быстрая. Предположим, что одна из этих трех сортировок окажется наибыстрейшей для среднего случая.