- •Сортировка выбором
- •Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для всех случаев
- •Сортировка вставками
- •1) Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для разных случаев
- •Сортировка пузырьком
- •1) Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для разных случаев
- •Сортировка слиянием
- •Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для разных случаев
- •Сортировка шелла (последовательность хиббарда, пратта)
- •Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для всех случаев
- •Последовательность хиббарда
- •Описание алгоритма
- •Последовательность пратта
- •Описание алгоритма
- •Лучший случай:
- •2. Средний случай:
- •3. Худший случай:
- •Быстрая сортировка
- •Описание алгоритма
- •Устойчивость сортировки
- •Функция временной сложности и её асимптотическая оценка
- •Функция пространственной сложности и её асимптотическая оценка
- •График функции временной сложности для разных случаев
- •Пирамидальная сортировка
- •Описание алгоритма
- •Практическая часть
- •Сортировка выбором
- •Сортировка вставками
- •Сортировка пузырьком
- •Сортировка слиянием
- •Сортировка шелла
- •Последовательность хиббарда
- •Последовательность пратта
- •Быстрая сортировка
- •Пирамидальная сортировка
Лучший случай:
2. Средний случай:
3. Худший случай:
5) Графики функции временной сложности для разных случаев
Рисунок 1.7 - Временная сложность сортировки с последовательностью Пратта в трех случаях.
Быстрая сортировка
Описание алгоритма
В массиве выбирается опорный элемент (в представленном алгоритме выбирается элемент с индексом в два раза меньше длины массива). Остальные элементы массива сравниваются с опорным и те, которые меньше него, ставятся слева от него, а которые больше или равны — справа. Для двух получившихся блоков массива операции повторяются, пока в блоке не останется один элемент.
Устойчивость сортировки
При разбиении массива относительно опорного элемента равные элементы могут быть расположены в произвольном порядке, что приводит к изменению их первоначального порядка.
Функция временной сложности и её асимптотическая оценка
Лучший случай:
Мы делим массив пополам на подмассивы до момента, пока подмассив не разделится на два отдельных элемента.
Общее уравнение
=
Рассмотрим, как происходит деление на первых трех уровнях:
Первый уровень:
Второй уровень:
Подставим это в первое уравнение:
Третий уровень:
Подставим это в первое уравнение и получим:
Можем заметить, что 8 при T(n) и 8 в знаменателе равны третьей степени двойки. Получим общую формулу:
В случае, когда подмассив разделился на два отдельных элемента (подмассивы длиной 1), временная сложность получается
Отсюда следует
Подставим в общую формулу:
Таким образом, временная сложность:
Асимптотическая
сложность:
Средний случай:
Предположим, что во время выполнения сортировки массив длиной разделяется на две части в соотношении 1:3. Составим рекуррентное уравнение:
Развернем его:
При
дальнейшем разбиении массива временная
сложность не будет меняться и будет
равна
.
При
разбиении на несколько уровней (примерно
раз), получим:
Таким
образом, асимптотическая сложность:
Худший случай:
В худшем случае во время сортировки массив каждый раз разделяется на две части: массив длиной 1 и массив длиной n-1.
Составим рекуррентное уравнение:
Развернем его, подставив :
Ещё раз развернем:
Развертывая уравнение до конца, получим:
Поскольку , а сумма от 2 до — это арифметическая прогрессия:
Таким образом, асимптотическая сложность:
Функция пространственной сложности и её асимптотическая оценка
Быстрая
сортировка использует стек вызовов для
хранения информации о рекурсивных
вызовах. В лучшем и среднем случаях
глубина рекурсии составляет
,
но в худшем случае (когда массив делится
на подмассивы длиной 1 и
)
она может достигать
.
Так
как
возрастает быстрее
,
поэтому пространственная сложность
данной сортировки:
График функции временной сложности для разных случаев
Рисунок 1.8 - Временная сложность быстрой сортировки в трех случаях (лучший случай совпал со средним).
Пирамидальная сортировка
Описание алгоритма
Сначала из неотсортированного массива создается куча. Это делается так, чтобы каждый родительский элемент был больше своих дочерних элементов. В результате получается "пирамидальная" структура. После того как куча построена, самый большой элемент находится на вершине кучи. Этот элемент перемещается в конец массива. После удаления элемента из кучи оставшаяся часть массива снова преобразуется в кучу. Процесс повторяется, пока все элементы не будут перемещены в отсортированный массив.
Устойчивость сортировки
Неустойчивая. Алгоритм строит кучу и извлекает элементы из нее, что может привести к изменению порядка равных элементов, так как порядок их обработки не гарантирует сохранение исходного порядка
Функция временной сложности и её асимптотическая оценка
Лучший
случай:
Средний
случай:
Худший
случай:
Функция пространственной сложности и её асимптотическая оценка
Алгоритм разработан на месте, и для выполнения задачи не требуется никакой дополнительной или временной памяти. Поэтому, пространственная сложность данного алгоритма:
График функции временной сложности для разных случаев
Так как функции временной сложности для всех трех случаев совпадают, ниже будет представлен один график для лучшего, среднего и худшего случая.
Рисунок 1.9 - Временная сложность пирамидальной сортировки в лучшем, среднем и худшем случаях (все они совпали).
Поместим графики функций временной сложности в среднем случае на одно изображение.
Рисунок 1.10 - Временная сложность сортировок в средних случаях.
Рассмотрев график, мы видим, что наибыстрейшей сортировкой является сортировка Шелла с последовательностью Пратта. Также меньше времени занимают пирамидальная сортировка и быстрая. Предположим, что одна из этих трех сортировок окажется наибыстрейшей для среднего случая.
