Cod sursa(job #1232685)

Utilizator cristigrigoreGrigore Cristan Andrei cristigrigore Data 23 septembrie 2014 17:51:36
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

using namespace std;
int i,j,m,n,H[500000],z;
void schimba(int x,int y)
{
    int aux;
    aux=H[x];
    H[x]=H[y];
    H[y]=aux;
}
void HeapUp(int k)
{
    int i,x;
    if(k<=1) return;
    x=k/2;
    if(H[x]<H[k])
    {
        schimba(x,k);
        HeapUp(x);
    }
}
void HeapDw(int l, int k)
{
    int st,dr,kk;
    if(2*l>k) return;
    else dr=st-1;
    st=H[2*l];
    if(2*l+1<=k) dr=H[2*l+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=2; i<n; i++)
    HeapUp(i);
    while(n>1)
    {
    schimba(1,n);
    n--;
    HeapDw(1,n);
    }
    for(i=1; i<=z; i++)
    printf("%d ",H[i]);
    return 0;
}