Cod sursa(job #1238303)

Utilizator rebound212Mihnea Savu rebound212 Data 6 octombrie 2014 18:13:44
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>

using namespace std;
int i,j,m,n,H[500001],z;
void schimba(int x,int y)
{
    int aux;
    aux=H[x];
    H[x]=H[y];
    H[y]=aux;
}
void HeapDw(int l, int k)
{
    int st,dr,kk;
    if(2*l>=k) return;
    st=H[2*l];
    if(2*l+1<=k) dr=H[2*l+1]; else dr=st-1;
    if(st>=dr) kk=2*l;
    else kk=2*l+1;
    if(H[l]<H[kk])
    {
        schimba(l,kk);
        HeapDw(kk,k);
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    z=n;
    for(i=1; i<=n; i++)
        scanf("%d",&H[i]);
    for(i=n/2 ; i ; i--)
        HeapDw(i,n);
    while(n>0)
    {
        schimba(1,n);
        n--;
        HeapDw(1,n);
    }

    for(i=1; i<=z; i++)
        printf("%d ",H[i]);
    return 0;
}