J-сортировка :: Jsort

J-сортировка || Jsort

Гибридная сортировка на основе сортировки кучей.

Построение кучи для неотсортированных подмассивов - достаточно дорогостоящая операция, имеющая среднюю временную сложность O(log n). Канадский учёный в области информатики Джейсон Моррисон предлагает формировать сортирующее дерево всего 2 раза - чтобы небольшие элементы переместить в левую часть массива, а крупные - в правую. Это в значительной степени упорядочит массив, после чего к нему можно будет применить сортировку вставками.

Алгоритм

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

Затем однократно строится ещё одна двоичная куча. Эта куча во всём противоположна предыдущей. Во-первых она неубывающая. Во-вторых, она является инвертированной - корень дерева соответствует последнему (а не первому) элементу массива, при формировании дерева массив перебирается от конца к началу (а не от начала к концу, как в обычной куче).

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

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

Сложность по времени

Однократное построение кучи - O(n). Двухкратное построение кучи - O(2n). Чем ближе массив к отсортированному состоянию, тем быстрее его обработает сортировка вставками, временная сложность при этом может достигать O(n). В итоге получаем лучший показатель O(3n), что то же самое что и O(n).

Характеристики алгоритма

НазваниеJ-сортировка (Jsort)
АвторДжейсон Моррисон (Jason Morrison)
КлассГибридные сортировки (кучей + вставками)
УстойчивостьНет
СравненияДа
Сложность по времениЛучшаяO (n)
ХудшаяO (n2)
Сложность по памятиОбщаяO(n)
ДополнительнаяO(1)

Ссылки

J-сортировка

Jsort

Джейсон Моррисон на LinkedIn

Джейсон Моррисон на сайте Университета Манитобы