Cod sursa(job #2270120)
Utilizator | Avram Rares Stefan avramrares | Data | 27 octombrie 2018 09:27:54 |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.12 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int H[500003],x,n,i,aux,srt[500003];
int HeapUp(int x)
{
if(x>1)
{
if(H[x]>H[x/2])
{
swap(H[x],H[x/2]);
HeapUp(x/2);
}
}
}
int HeapDown(int x, int n)
{
int st,dr;
if (2*x<=n)
{
st=H[2*x];
if (2*x+1<=n)
{
dr=H[2*x+1];
}
else
{
dr=st-1;
}
if (max(st,dr)>H[x])
{
if (st>dr)
{
swap(H[x],H[2*x]);
HeapDown(2*x,n);
}
else
{
swap(H[x],H[2*x+1]);
HeapDown(2*x+1,n);
}
}
}
}
int main()
{
f>>n;
for(i=1; i<=n; i++)
{
f>>H[i];
HeapUp(i);
}
aux=n;
while(n>1)
{
swap(H[1],H[n]);
srt[n]=H[n];
n--;
HeapDown(1,n);
}
srt[1]=H[1];
for(i=1; i<=aux; i++)
g<<srt[i]<<" ";
return 0;
}