Pagini recente » Cod sursa (job #345957) | Cod sursa (job #2592657) | Cod sursa (job #1541625) | Cod sursa (job #531708) | Cod sursa (job #2085537)
#include <iostream>
#include <fstream>
#define MaxN 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int N, a[MaxN];
void heapify()
{
if (a[0]==N)
return;
a[0]++;
int i = a[0], f = i/2;
while (f)
{
if (a[f] > a[i])
swap(a[f], a[i]);
else
break;
i = f;
f = i/2;
}
}
int pop_h()
{
int r=a[1], fi, i = 1;
swap(a[1], a[a[0]]);
a[0]--;
while (2*i<=a[0])
{
fi = 2*i;
if (fi+1<=a[0])
if (a[fi+1] < a[fi])
fi++;
if (a[i] > a[fi])
swap(a[i], a[fi]);
else
break;
i = fi;
}
return r;
}
int main()
{
f>>N;
for (int i=1;i<=N;i++)
f>>a[i];
a[0] = 1;
while (a[0]<N)
heapify();
for (int i=1;i<=N;i++)
{
g<<pop_h()<<' ';
}
}