Pagini recente » Borderou de evaluare (job #447463) | Cod sursa (job #447469) | Cod sursa (job #1844608)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#define N 200001
using namespace std;
int i, n, H[N];
void sift(int k)
{
int s = 1;
while (s)
{
s = 0;
if(2 * k <= n)
{
s = 2 * k;
if(s + 1 <= n && H[s + 1] < H[s])
s++;
if(H[s] >= H[k])
s = 0;
}
if(s)
{
swap(H[k], H[s]);
k = s;
}
}
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &H[i]);
for(i = n / 2; i; i--)
sift(i);
while(n)
{
printf("%d ", H[1]);
H[1] = H[n--];
sift(1);
}
return 0;
}