86
ОСНОВЫ АЛГОРИТМОВ И СТРУКТУР ДАННЫХ
от шага к шагу сам массив
X
таким образом, чтобы в его структуре легко было
выделить
X
’,
X
’’… . Это легко сделать, если элементы
X
своей структурой
образуют пирамиду.
5.3.1. Пирамидальная сортировка
Пирамида — это полностью сбалансированное бинарное дерево высоты
h
,
в котором все листья находятся на расстоянии
h
или (
h
– 1) от корня и все
потомки узла меньше его самого; кроме того, в нем все листья уровня
h
максимально смещены влево.
Например, для массива
91 48 58 94 34 18 85 93 10 75 51 44
пирамида может принять следующий вид:
94
93
75
91
18
85
58
48
10
44
34
51
Рис. 69. Пирамида
В памяти дерево можно представить одномерным массивом, используя
следующие правила: корень записывается в 1-ю позицию; если некоторый узел
записан в позицию
i
, то его левый сын пишется в позицию 2
i
, а правый – (2
i
+1).
Таким образом, приведённая пирамида запишется следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12
94 93 75 91 85 44 51 18 48 58 10 34
Сортировка пирамиды в порядке возрастания ключей осуществляется
следующим образом:
шаг
1. Наибольшее имя (оно всегда первое) помещаем в последнюю
позицию.
n
x x
1
шаг i
(
i
=2,…,n). После обмена, произведённого на шаге (
i
-1) пирамида
может быть испорчена (например, после первого шага первым стоит не
наибольший ключ 34). Тогда восстанавливаем пирамиду. Корень её
переставляем в
i
-ю позицию с конца.
i
n
x x
−+
1
1
.
Таким образом, имеем алгоритм:
1...,78,79,80,81,82,83,84,85,86,87 89,90,91,92,93,94,95,96,97,98,...106