Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekzamen_timp.docx
Скачиваний:
20
Добавлен:
19.06.2019
Размер:
1.2 Mб
Скачать

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

Пирамидальная сортировка – сортировка кучей (бинарное сортирующее дерево) – алгоритмическая сложность всегда O(n∙logn). Общая идея пирамидальной сортировки заключается в том, что сначала строится пирамида из элементов исходного массива, а затем осуществляется сортировка элементов. Массив можно отсортировать, если на его основе строить и перестраивать сортирующее дерево

Сортирующее дерево - дерево, у которого любой родитель больше (или меньше, смотря в какую сторону оно сортирующее) чем его потомки. Чтобы из обычного сделать сортирующее нужно двигаться от потомков вверх к родителям и если потомок больше родителя, то менять местами. Если такой обмен произошёл, опустившегося на один уровень родителя нужно сравнить с потомками ниже – может и там тоже будет повод для обмена.

Преобразовывая неотсортированную часть массива в сортирующее дерево, в итоге в корень «всплывёт» наибольший элемент. Обмениваем максимум с последним ключом неотсортированного подмассива. Структура перестанет быть сортирующим деревом, но его неотсортированная часть станет меньше на один узел. К этой неотсортированной части заново применим всю процедуру, то есть преобразуем её в сортирующее дерево с последующей перестановкой найденного максимума в конец. И так действуем до тех пор, пока неотсортированная часть не скукожится до одного-единственного элемента.

Достоинства и недостатки.

Достоинства

Недостатки

Имеет доказанную оценку худшего случая О (n log n)

Неустойчив

Сортирует на месте, т.е. требует всего О(1) дополнительной памяти

На почти отсортированных массивах работает столь же долго, как и на хаотических данных

На одном шаге выборку приходится делать хаотично по всей длине массива – поэтому алгоритм плохо сочетается с кэшированием памяти

Методу требуется «мгновенный» прямой доступ; не работает на связных списках

Из-за сложности алгоритма выигрыш получается только на больших n. На небольших n (до нескольких тысяч) быстрее сортировка Шелла.

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

Быстрая сортирвка (Чарльз Хоар) - это алгоритм сортировки, сложность которого в среднем и лучшем составляет O(n∙log(n)), в худшем - O(n2). Суть его предельно проста: выбирается так называемый опорный элемент, и массив делится на 3 подмассива: меньших опорного, равных опорному и больших опорного. Левая и правая границы должны сомкнуться, потом этот алгоритм применяется рекурсивно к подмассивам.

Алгоритм:

1. Выбираем опорный элемент.

2. Разбиваем массив на три части

- создаем переменные l и r – индексы соответственно начала и конца рассматриваемого подмассива

- увеличиваем l, пока l-ый элемент меньше опорного

- уменьшаем r, пока r-ый элемент больше опорного

- если l все еще меньше r, то меняем l-ый и r-ый элементы местами, инкрементируем l и декрементируем r

- если l вдруг становится больше r, то прерываем цикл

3. Повторяем рекурсивно, пока не дойдем до массива из 1 элемента

Соседние файлы в предмете Технологии и методы программирования