Cod sursa(job #241628)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 10 ianuarie 2009 15:49:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
# include <cstdio>

# define FIN "algsort.in"
# define FOUT "algsort.out"
# define MAXN 500005

int N;
int H[MAXN];

    void swap(int &a, int &b)
    {
        int aux = a;
        a = b;
        b = aux;
    }

    void down(int i, int N)
    {
        int fiu = i << 1, tata = i;
        
        while (fiu <= N)
        {
            if (fiu < N && H[fiu] > H[fiu+1]) fiu++;
            if (H[tata] > H[fiu])
            {
                swap(H[tata], H[fiu]);
                tata = fiu;
                fiu <<= 1;
            } else fiu = N + 1;
        }
    }

    void heapsort(int N)
    {
        int i; 
         
        for (i = N >> 1; i >= 1; --i)
           down(i, N);
        
        for (i = N; i >= 1; --i)
        {
            printf("%d ",H[1]);
            H[1] = H[i];
            down(1, i);
        }
    }

    int main()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        scanf("%d",&N);
        for (int i = 1; i <= N; ++i)
           scanf("%d",&H[i]);
           
        heapsort(N);
        
        return 0;
    }