#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
int h[N],size1;
void down(int u)
{
int t = u;
if (2 * u <= size1 && h[2 * u] < h[t]) t = 2 * u;
if (2 * u + 1 <= size1 && h[2 * u + 1] < h[t]) t = 2 * u + 1;
if (t != u)
swap(h[u], h[t]), down(t);
}
int main()
{
int n;cin >> n;
for (int i = 1;i <= n;i++) cin >> h[i];
size1 = n;
for (int i = n >>1;i;i--) down(i);
cout << "\n排序后:";
for (int i = 0;i < n;i++)
{
cout << h[1] << " ";
h[1] = h[size1--];
down(1);
}
return 0;
}
堆排序
最新推荐文章于 2024-09-04 23:05:17 发布