Изменения

Перейти к: навигация, поиск

Сортировка кучей

138 байт убрано, 16:08, 21 марта 2015
JSort
= JSort =
'''JSort''' является модификацией сортировки кучей, которую придумал Джейсон Моррисон (''Jason Morrison'').
Алгоритм частично упорядочивает массив, строя на нем два раза кучу: один раз передвигая меньшие элементы влево, второй раз передвигая большие элементы вправо.Затем к массиву применяетсяДосортировав массив [[Сортировка вставками|сортировкой сортировка вставками]], можно получить временную сложность которая при почти отсортированных данных работает за <tex>O(n)</tex> в лучшем случае.
Сортировка кучей обладает двумя большими недостаткамиДостоинства:*Невозможность использования кэшаВ отличии от сортировки кучей, так как наше движение по массиву в чем-то похоже на хаотичное.*На почти отсортированных массивах работает столь же долгобыстрее, как и чем на хаотических данныхслучайных.*В силу использования сортировки вставками, которая просматривает элементы последовательно, использование кэша гораздо эффективнее.Недостатки:Так как *На длинных массивах, возникают плохо отсортированные последовательности в Jsort на последнем этапе используется сортировка вставкамисередине массива, то это частично решает проблемы что приводит к ухудшению работы сортировки кучей. Почти отсортированные данные сортируются за линейное времявставками.
=== Алгоритм ===
 Необходимо отсортировать массив.Построим невозрастающую кучу для минимума на этом массиве.
Тогда наименьший элемент окажется на первой позиции, а левая часть массива окажется почти отсортированной, так как ей будут соответствовать верхние узлы кучи.
Теперь построим на этом же массиве кучу так, чтобы немного упорядочить правую часть массива. Эта куча должна быть неубывающей кучей для максимума и быть "зеркальной" к массиву, то есть чтобы ее корень соответствовал последнему элементу массива.Получившийся почти отсортированный массив досортируем сортировкой К получившемуся массиву применим сортировку вставками.
=== Сложность ===
Постройка кучи занимает <tex>O(n)</tex>. Почти упорядоченный массив сортировка вставками может отсортировать <tex> O(n)</tex>, но в худшем случае за <tex>O(n^2)</tex> в худшем.
Таким образом в худшем случае сложность JSort является <tex>O(n^2)</tex>, а в лучшем <tex>O(n)</tex>.
=== Пример ===
Рассмотрим, массив <tex> A </tex> = <tex> (1, 2, 8, 15, 17, 20, 31, 32, 30, 2, 3, 5, 10, 11, 24 ) </tex>
Построим на этом массиве невозрастающую кучудля минимума:
{| cellpadding="3" style="margin-left: left; margin-right: left;"
| [[Файл:HeapW.png|400px]]
Заметим, что начало почти упорядочено, что хорошо скажется на использовании сортировки вставками.
Построим теперь зеркальную неубывающую кучу для максимума на этом же массиве.
{| cellpadding="3" style="margin-left: left; margin-right: left;"
| [[Файл:HeapWU.png|400px]]
143
правки

Навигация