Pagini recente » Cod sursa (job #158179) | Cod sursa (job #934411) | Cod sursa (job #2469065) | Cod sursa (job #1658460) | Cod sursa (job #2270127)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,i,h[500001];
void heapup(int x)
{
if(x>1){
if(h[x]>h[x/2])
swap(h[x],h[x/2]);
heapup(x/2);
}
}
void 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(st>dr && h[x]<st){
swap(h[x],h[2*x]);
heapdown(2*x,n);
}
else if(h[x]<dr)
{
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];
for(i=2;i<=n;i++)
heapup(i);
for(i=1;i<=n-1;i++)
{swap(h[1],h[n-i+1]);
heapdown(1,n-i);
}
for(i=1;i<=n;i++)
g<<h[i]<<" ";
return 0;
}