Pagini recente » Cod sursa (job #525684) | Cod sursa (job #1226257) | Cod sursa (job #2334788) | Cod sursa (job #2349190) | Cod sursa (job #2068701)
#include <fstream>
#include <math.h>
using namespace std;
int n,x,b,m,i,a[500001];
void up(int p)
{
if (p>1 && a[p/2]>a[p])
{
swap(a[p],a[p/2]);
up(p/2);
}
}
void down (int p)
{
if (p*2+1<=m && (a[p*2]<a[p] || a[p*2+1]<a[p]))
{
if (a[p*2]<a[p*2+1])
{
swap(a[p],a[p*2]);
down (p*2);
}
else
{
swap(a[p*2+1],a[p]);
down(p*2+1);
}
}
else if (p*2<=m && a[p*2]<a[p])
swap (a[p*2],a[p]);
}
void add (int x)
{
a[++m]=x;
up(m);
}
void del(int p)
{
swap(a[p],a[m]);
m--;
up(p);
down(p);
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> n;
fin >> a[1];
m=1;
for (i=2; i<=n; i++)
{
fin >> b;
add(b);
}
for (i=1; i<=n; i++)
{
fout << a[1] << " ";
del(1);
}
fout << '\n';
return 0;
}