Pagini recente » Cod sursa (job #620626) | Cod sursa (job #943778) | Cod sursa (job #1072736) | Cod sursa (job #3219747) | Cod sursa (job #345226)
Cod sursa(job #345226)
#include <cstdio>
#define t(x) ((x)/2)
#define fs(x) ((x)*2)
#define fd(x) ((x)*2+1)
#define MaxN 500009
long long a[MaxN],heap[MaxN];
int n,m;
void cit()
{
int i;
freopen("algsort.in","r",stdin);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
}
void swap(int x,int y)
{
int aux=a[x];
a[x]=a[y];
a[y]=aux;
}
void reconstituie_heap(int nod)
{
int max;
if(fs(nod)<=n && a[fs(nod)]>a[nod])
max=fs(nod);
else
max=nod;
if(fd(nod)<=n && a[fd(nod)]>a[max])
max=fd(nod);
if(max!=nod)
{
swap(nod,max);
reconstituie_heap(max);
}
}
void construieste_heap()
{
int i,N=n/2;
for(i=N;i>0;i--)
reconstituie_heap(i);
}
void heapsort()
{
int i;
m=n;
construieste_heap();
for(i=m;i>1;i--)
{
swap(1,i);
n--;
reconstituie_heap(1);
}
n=m;
}
void afis()
{
int i;
freopen("algsort.out","w",stdout);
for(i=1;i<=n;i++)
printf("%lld ",a[i]);
}
int main()
{
cit();
heapsort();
afis();
return 0;
}