Pagini recente » Borderou de evaluare (job #2830532) | Cod sursa (job #3174363) | Cod sursa (job #2262062) | Cod sursa (job #1466553) | Cod sursa (job #1789420)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 500000;
int n, k, p;
int heap[NMAX + 5];
void hinsert(int x)
{
heap[++k] = x; p = k;
while (p > 1 && heap[p] < heap[p >> 1])
{
swap(heap[p], heap[p >> 1]);
p >>= 1;
}
}
void heapsort()
{
for (int i = 1; i <= n; ++i)
{
printf("%d ", heap[1]);
heap[1] = heap[k];
--k; p = 1;
while ((p << 1) <= k)
{
int st = (p << 1);
int dr = st + 1;
int best = st;
if (dr <= k && heap[st] > heap[dr])
best = dr;
if (heap[p] > heap[best])
swap(heap[p], heap[best]);
else
break;
p = best;
}
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
int x;
scanf("%d", &x);
hinsert(x);
}
heapsort();
return 0;
}