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

Строит кучу и последовательно извлекает минимум или максимум.

СигнатураO(n log n)

Сортировка кучей строит из массива двоичную кучу, а затем n раз извлекает корень (минимум или максимум), помещая его в конец. Сочетает гарантированную скорость и сортировку на месте.

Сложность: время O(n log n) во всех случаях. Память: O(1) при сортировке на месте. Неустойчивая.

import heapq

def heapsort(a):
    h = list(a)
    heapq.heapify(h)            # O(n)
    return [heapq.heappop(h)    # n раз O(log n)
            for _ in range(len(h))]

print(heapsort([5, 1, 8, 3]))  # [1, 3, 5, 8]
← Все записи: Алгоритмы и структуры данных
Поддержать проект