Cod sursa(job #965514)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 24 iunie 2013 01:16:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
// HeapSort

#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX = 500005;
int i,N,A[NMAX],T;
void HeapUp(int F)
{
    int P=F/2;
    if(!P) return;
    if(A[P]<A[F])
    {
        swap(A[P],A[F]);
        HeapUp(P);
    }
}
void HeapDown(int P)
{
    int F=P*2;
    if(F>N) return;
    if(A[F+1]>A[F] && F+1<=N) F=F+1;
    if(A[P]<A[F])
    {
        swap(A[P],A[F]);
        HeapDown(F);
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        scanf("%d",&A[i]);
        HeapUp(i);
    }
    for(T=N,i=N;i>=2;i--)
    {
        swap(A[1],A[i]);
        N--;
        HeapDown(1);
    }
    for(i=1;i<=T;i++) printf("%d ",A[i]);
    return 0;
}