#include <iostream>
#include <vector>
using namespace std;
void heapify(vector<int>& arr, int n, int i) {
int largest = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < n && arr[left] > arr[largest])
largest = left;
if (right < n && arr[right] > arr[largest])
largest = right;
if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, n, largest);
}
}
void buildHeap(vector<int>& arr, int n) {
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(arr, n, i);
}
}
void heapSort(vector<int>& arr, int n) {
buildHeap(arr, n);
for (int i = n - 1; i > 0; i--) {
swap(arr[0], arr[i]);
heapify(arr, i, 0);
}
}
int main() {
vector<int> arr = {5, 10, 264, 362, 865, 63, 94, 475, 135, 932,
25, 9, 33, 287, 332, 745, 377, 820, 62, 1};
int n = arr.size();
// 1. 힙 생성
vector<int> heapArr = arr; // 복사
buildHeap(heapArr, n);
cout << "1. 생성된 힙 배열: [";
for (int i = 0; i < n; i++) {
cout << heapArr[i];
if (i != n - 1) cout << ", ";
}
cout << "]\n";
// 2. 힙 정렬
heapSort(arr, n);
cout << "2. 정렬된 배열: [";
for (int i = 0; i < n; i++) {
cout << arr[i];
if (i != n - 1) cout << ", ";
}
cout << "]\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBoZWFwaWZ5KHZlY3RvcjxpbnQ+JiBhcnIsIGludCBuLCBpbnQgaSkgewogICAgaW50IGxhcmdlc3QgPSBpOwogICAgaW50IGxlZnQgPSAyICogaSArIDE7CiAgICBpbnQgcmlnaHQgPSAyICogaSArIDI7CgogICAgaWYgKGxlZnQgPCBuICYmIGFycltsZWZ0XSA+IGFycltsYXJnZXN0XSkKICAgICAgICBsYXJnZXN0ID0gbGVmdDsKCiAgICBpZiAocmlnaHQgPCBuICYmIGFycltyaWdodF0gPiBhcnJbbGFyZ2VzdF0pCiAgICAgICAgbGFyZ2VzdCA9IHJpZ2h0OwoKICAgIGlmIChsYXJnZXN0ICE9IGkpIHsKICAgICAgICBzd2FwKGFycltpXSwgYXJyW2xhcmdlc3RdKTsKICAgICAgICBoZWFwaWZ5KGFyciwgbiwgbGFyZ2VzdCk7CiAgICB9Cn0KCnZvaWQgYnVpbGRIZWFwKHZlY3RvcjxpbnQ+JiBhcnIsIGludCBuKSB7CiAgICBmb3IgKGludCBpID0gbiAvIDIgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGhlYXBpZnkoYXJyLCBuLCBpKTsKICAgIH0KfQoKdm9pZCBoZWFwU29ydCh2ZWN0b3I8aW50PiYgYXJyLCBpbnQgbikgewogICAgYnVpbGRIZWFwKGFyciwgbik7CgogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID4gMDsgaS0tKSB7CiAgICAgICAgc3dhcChhcnJbMF0sIGFycltpXSk7CiAgICAgICAgaGVhcGlmeShhcnIsIGksIDApOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHZlY3RvcjxpbnQ+IGFyciA9IHs1LCAxMCwgMjY0LCAzNjIsIDg2NSwgNjMsIDk0LCA0NzUsIDEzNSwgOTMyLAogICAgICAgICAgICAgICAgICAgICAgIDI1LCA5LCAzMywgMjg3LCAzMzIsIDc0NSwgMzc3LCA4MjAsIDYyLCAxfTsKCiAgICBpbnQgbiA9IGFyci5zaXplKCk7CgogICAgLy8gMS4g7Z6ZIOyDneyEsQogICAgdmVjdG9yPGludD4gaGVhcEFyciA9IGFycjsgIC8vIOuzteyCrAogICAgYnVpbGRIZWFwKGhlYXBBcnIsIG4pOwoKICAgIGNvdXQgPDwgIjEuIOyDneyEseuQnCDtnpkg67Cw7Je0OiBbIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgY291dCA8PCBoZWFwQXJyW2ldOwogICAgICAgIGlmIChpICE9IG4gLSAxKSBjb3V0IDw8ICIsICI7CiAgICB9CiAgICBjb3V0IDw8ICJdXG4iOwoKICAgIC8vIDIuIO2emSDsoJXroKwKICAgIGhlYXBTb3J0KGFyciwgbik7CgogICAgY291dCA8PCAiMi4g7KCV66Cs65CcIOuwsOyXtDogWyI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNvdXQgPDwgYXJyW2ldOwogICAgICAgIGlmIChpICE9IG4gLSAxKSBjb3V0IDw8ICIsICI7CiAgICB9CiAgICBjb3V0IDw8ICJdXG4iOwoKICAgIHJldHVybiAwOwp9Cg==
1. 생성된 힙 배열: [932, 865, 332, 820, 25, 63, 287, 745, 362, 10, 5, 9, 33, 264, 94, 475, 377, 135, 62, 1]
2. 정렬된 배열: [1, 5, 9, 10, 25, 33, 62, 63, 94, 135, 264, 287, 332, 362, 377, 475, 745, 820, 865, 932]