一、题目
活动 - AcWing 系统讲解常用算法与数据结构,给出相应代码模板,并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/840/
二、题解
#include<iostream>
using namespace std;
const int N = 100010;
int n, m, q[N], sz;
void siftDown(int parent)
{
int child = (parent << 1) + 1;
while (child < sz)
{
if (child + 1 < sz && q[child + 1] > q[child]) child++;
if (q[child] > q[parent]) {
swap (q[child], q[parent]);
parent = child;
child = (parent << 1) + 1;
} else break;
}
}
void heapify()
{
for (int parent = (sz - 1 - 1) >> 1; parent >= 0; parent--)
siftDown(parent);
}
void heap_sort()
{
heapify();
while (sz > 0)
{
swap(q[0], q[--sz]);
siftDown(0);
}
}
int main()
{
cin >> n >> m;
sz = n;
for (int i = 0; i < n; i++) cin >> q[i];
heap_sort();
for (int i = 0; i < m; i++) cout << q[i] << " ";
return 0;
}