Далее представлен краткий конспект разбора пирамидальной сортировки по книге «Алгоритмы. Построение и анализ» (Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн). Примеры кода написаны на языке Java.
Время работы - O(n*logn).
Свойства:
- Не требует дополнительной памяти, работает с тем же массивом данных.
- Используется структура данных - Двоичное дерево (куча) .
Принцип работы:
- Строим пирамиду
- Сохраняем размер массива в отдельную переменную
- Так как максимальный элемент находится в корне т.е. a[0], то меняем местами с последним элементом массива, и уменьшаем размер переменной в которой у нас записан размер массива
- Вызываем метод поддержки свойств пирамиды heapify(array, 0)
Бинарное дерево с максимальным элементом в корне
Представление бинарного дерева в виде массива
Родитель и потомки любого узла вычисляются по следующем методам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
Метод поддержки свойств пирамиды:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Пример работы
Метод создания пирамиды
1 2 3 4 5 6 7 8 9 10 |
|
Пример работы построения кучи из массива A
Метод сортировки:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Пример работы алгоритма пирамидальной сортировки