Pagini recente » Cod sursa (job #1633244) | Cod sursa (job #1602524) | Cod sursa (job #278310) | Cod sursa (job #3293364) | Cod sursa (job #1066029)
#include <iostream>
#include <fstream>
#include <climits>
#include <cmath>
using namespace std;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
void swap (int &a, int &b)
{
int t=a;
a=b;
b=t;
}
int minim (int a, int b, int i)
{
if (a>b)
return 2*i+1;
else
return 2*i;
}
void up(int *v, int i)
{
while (i!=1 && v[i]<v[i/2])
{
swap (v[i], v[i/2]);
i=i/2;
}
}
void down(int *v, int i, int N)
{
if (2*i>N)
return;
else
{
if (2*i+1<=N)
{
int poz=minim(v[2*i], v[2*i+1], i);
if (v[poz]>=v[i])
return;
else
{
swap (v[i], v[poz]);
down (v, poz, N);
}
}
else
{
if (v[2*i]>=v[i])
return;
else
{
swap (v[i], v[2*i]);
return;
}
}
}
}
void push (int v[500005], int poz, int val)
{
v[poz]=val;
up(v, poz);
}
void pop (int *v, int N)
{
out<<v[1]<<" ";
v[1]=v[N];
down(v, 1, N);
}
int main()
{
int N;
in>>N;
int x, v[500005];
for (int i=1;i<=N;++i)
{
in>>x;
push(v, i, x);
}
for (int i=0;i<N;++i)
pop(v, N-i);
return 0;
}