/
R80
/
seek
Обзор
Документация
Войти
/
R80
/
seek
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
heap.cpp
70 строк
2 KB
Denis Vergun
remake
01 сен 2023, 16:41
01 сен 2023, 16:41
d7c6f5b
Код
Авторство
О чём код?
/ Реализация пирамидальной сортировки на C++ #include <iostream> using namespace std; // Процедура для преобразования в двоичную кучу поддерева с корневым узлом i, что является // индексом в arr[]. n - размер кучи void heapify(int arr[], int n, int i) { int largest = i; // Инициализируем наибольший элемент как корень int l = 2*i + 1; // левый = 2*i + 1 int r = 2*i + 2; // правый = 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 heapSort(int arr[], int n) { // Построение кучи (перегруппируем массив) for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); // Один за другим извлекаем элементы из кучи for (int i=n-1; i>=0; i--) { // Перемещаем текущий корень в конец swap(arr[0], arr[i]); // вызываем процедуру heapify на уменьшенной куче heapify(arr, i, 0); } } /* Вспомогательная функция для вывода на экран массива размера n*/ void printArray(int arr[], int n) { for (int i=0; i<n; ++i) cout << arr[i] << " "; cout << "\n"; } // Управляющая программа int main() { int arr[] = {12, 11, 13, 5, 6, 7}; int n = sizeof(arr)/sizeof(arr[0]); heapSort(arr, n); cout << "Sorted array is \n"; printArray(arr, n); }