Cod sursa(job #275209)

Utilizator RobybrasovRobert Hangu Robybrasov Data 10 martie 2009 12:04:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
//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;
}