Pagini recente » Cod sursa (job #627317) | Cod sursa (job #3262268) | Cod sursa (job #1089970) | Cod sursa (job #3123395) | Cod sursa (job #240396)
Cod sursa(job #240396)
//Heapsort
#include <cstdio>
#define N 1000000
int H[N],n,i;
void down(int tata, int n)
{
int fiu=tata<<1,val=H[tata];
if (H[fiu|1]>H[fiu] && fiu<n) fiu|=1;
while (fiu<=n && val<H[fiu])
{
H[tata]=H[fiu];
tata=fiu; fiu<<=1;
if (H[fiu|1]>H[fiu] && fiu<n) fiu|=1;
}
H[tata]=val;
}
void build_heap()
{
for (int i=n>>1; i; i--) down(i,n);
}
void sort()
{
int t;
for (i=n; i>1; i--)
{
t=H[1]; H[1]=H[i]; H[i]=t;
down(1,i-1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d\n",&n);
for (i=1; i<=n; i++) scanf("%d",&H[i]);
build_heap();
sort();
for (i=1; i<=n; i++) printf("%d ",H[i]);
return 0;
}