Pagini recente » Cod sursa (job #1905285) | Cod sursa (job #631030) | Cod sursa (job #167403) | Cod sursa (job #865354) | Cod sursa (job #1041794)
#include <fstream>
using namespace std;
int v[500001],i,n,k;
void heap_up(int nod)
{
while (v[nod/2]<v[nod] && nod>1)
{
swap(v[nod/2],v[nod]);
nod=nod/2;
}
}
void heap_down(int nod)
{
if (nod*2+1<=k && max(v[nod*2+1],v[nod*2])>v[nod])
{
if (v[nod*2+1]>v[nod*2]) swap(v[nod],v[nod*2+1]),heap_down(nod*2+1);
else swap(v[nod],v[nod*2]),heap_down(nod*2);
}
else if (nod*2<=k && v[nod*2]>v[nod])
{
swap(v[nod],v[nod*2]);
heap_down(nod*2);
}
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
int x;
for (i=1;i<=n;i++) f>>x,v[i]=x,heap_up(i);
k=n;
while (k>1)
{ swap(v[1],v[k]);
k--;
heap_down(1);
}
for (i=1;i<=n;i++) g<<v[i]<<" ";
g<<'\n';
f.close();
g.close();
return 0;
}