Pagini recente » Cod sursa (job #2720457) | Cod sursa (job #2242269) | Cod sursa (job #1220251) | Cod sursa (job #1107156) | Cod sursa (job #240225)
Cod sursa(job #240225)
//heapsort recursiv
#include<stdio.h>
#define N 500001
int n,i,a[N];
void readd(),heap_sort(),hd(int ic,int nc),sw(int i1,int i2),prints();
int main()
{
readd();
heap_sort();
prints();
return 0;
}
void readd()
{
freopen("algsort.in","rt",stdin);
freopen("algsort.out","wt",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
}
void heap_sort()
{
for(i=n/2;i>=1;i--)hd(i,n);
for(i=n;i>=1;i--){sw(1,i);hd(1,i-1);}
}
void hd(int ic,int nc)
{
int is=ic<<1;
if(is>nc)return;
if(is<nc)if(a[is]<a[is+1])is++;
if(a[ic]<a[is]){sw(is,ic);hd(is,nc);}
}
void sw(int i1,int i2)
{
int aux=a[i1];a[i1]=a[i2];a[i2]=aux;
}
void prints()
{
for(i=1;i<=n;i++)printf("%d ",a[i]);
}