Пирамидальная сортировка Heap Sort (сортировка кучей) Идея: представить сортируемый массив как почти полное двоичное дерево – пирамиду или кучу (не путать с областью для динамического выделения памяти в ОС) Все уровни, кроме, возможно, последнего, будут заполнены Базовое свойство пирамиды (max heap): если B является узлом-потомком узла A, то ключ(A) ≥ ключ(B) Элемент с максимальным ключом – всегда корневой Если неравенство развернуть – будет т. н. min heap, «перевернутая» пирамида – для сортировки по убыванию ключей
Этапы пирамидальной сортировки Построение пирамиды Добавляем в пирамиду элементы массива, обеспечивая сохранение базового свойства (max heap) Сортировка Проталкиваем текущий корень до листа с обменом «Удаляем» этот лист На самом деле никакого дерева нет – все действия делаются внутри самого массива
Характеристики Временная сложность Средняя и наихудшая ВС равны O(n*log n) Пространственная сложность O(n) Требуется O(1) дополнительных элементов для хранения промежуточных данных Алгоритм неустойчив (может обменять уже упорядоченные значения) В большинстве случаев слегка уступает быстрой сортировке, но зато стабилен по времени Один из лучших методов сортировки массивов
Поразрядная (Radix Sort, 1887 год) Числа сортируются по разрядам (цифрам). Существует два варианта least significant digit (LSD) и most significant digit (MSD). При LSD-сортировке сначала сортируются младшие разряды, затем старшие; при MSD-сортировке - наоборот. При LSDсортировке короткие ключи идут раньше длинных, ключи одного размера сортируются по алфавиту, это совпадает с нормальным представлением чисел: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. При MSD-сортировке получается алфавитный порядок, который подходит для сортировки строк. Например "b, c, d, e, f, g, h, i, j, ba" отсортируется как "b, ba, c, d, e, f, g, h, i, j". Если MSD применить к числам разной длины, то получим последовательность 1, 10, 2, 3, 4, 5, 6, 7, 8, 9 Сложность определяется как O(k*n), где k – число разрядов. Иногда выгодна для больших массивов, но зачастую k имеет порядок log n Требуется знание природы ключей (max число цифр в ключе) Хорошо распараллеливается