Cod sursa(job #1238299)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 6 octombrie 2014 17:48:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
# include <cstdio>
# include <algorithm>
# define MAXN 500001

using namespace std;
int H[MAXN],n,i;

void HeapDown(int p,int n)
{
    int i,St,Dr;
    if(2*p<=n)
    {
        St=H[2*p];
        if(2*p+1<=n) Dr=H[2*p+1];
        else Dr=St-1;
        if(St>Dr) i=2*p;
        else i=2*p+1;
        if(H[p]<H[i])
        {
            swap(H[p],H[i]);
            HeapDown(i,n);
        }
    }
}
void buildH(int n)
{
    int i;
    for(i=n/2; i>=1; --i)
        HeapDown(i,n);

}
void SortHeap(int n)
{
    while(n>1)
    {
        swap(H[1],H[n]);
        n--;
        HeapDown(1,n);
    }
}
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]);
    buildH(n);
    SortHeap(n);
    for(i=1; i<=n; ++i)
        printf("%d ", H[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}