КучаHeapSortHeapifyСтруктуры данных
1 мин чтение
Двоичная куча (Пирамида), Очередь с приоритетами и HeapSort
Двоичная куча: представление в массиве, процедуры sift_up и sift_down (heapify), построение кучи Build-Heap за линейное время O(N), операции Extract-Max и Increase-Key, пирамидальная сортировка HeapSort.
Исходная заготовка: полнота объяснения и примеров ожидает редакторской проверки.
Устройство двоичной кучи в массиве
Для узла с индексом (0-indexed):
parent(i) = (i - 1) / 2left(i) = 2 * i + 1right(i) = 2 * i + 2Основное свойство Max-Heap:
Почему Build-Max-Heap работает за ?
cpp
void heapify(vector<int>& arr, int n, int i) {
int largest = i;
int l = 2 * i + 1, r = 2 * i + 2;
if (l < n && arr[l] > arr[largest]) largest = l;
if (r < n && arr[r] > arr[largest]) largest = r;
if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
void buildHeap(vector<int>& arr) {
int n = arr.size();
for (int i = n / 2 - 1; i >= 0; --i) {
heapify(arr, n, i);
}
}
Суммируя высоту узлов на каждом уровне:
Что дальше?
Закрепите материал задачей: Повторить число.
Изучено — к практике →Отметка сохранится в этом браузере. Её можно отменить или снять кнопкой «Изучено».