Pagini recente » Cod sursa (job #2940808) | Cod sursa (job #2598728) | Cod sursa (job #275994) | Cod sursa (job #722006) | Cod sursa (job #2270119)
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[500001],i,x,n;
void heapup(int x)
{
if(x>1)
{
if(a[x]>a[x/2]){
swap(a[x],a[x/2]);
heapup(x/2);
}
}
}
void heapdown(int x,int n)
{
int st,dr;
if(2*x<=n)
{
st=a[2*x];
dr=a[2*x+1];
if(x*2+1<=n)dr=a[x*2+1];
else dr=st-1;
if(st>dr&&a[x]<st)
{
swap(a[x],a[2*x]);
heapdown(2*x,n);
}
else if(a[x]<dr&&2*x+1<=n)
{
swap(a[x],a[2*x+1]);
heapdown(2*x+1,n);
}
}
}
int main()
{
f>>n;
f>>a[1];
for(i=2;i<=n;i++)
{
f>>a[i];
heapup(i);
}
int m=n;
while(n>1)
{
swap(a[1],a[n]);
n--;
heapdown(1,n);
}
for(i=1;i<=m;i++)
g<<a[i]<<" ";
return 0;
}