Cod sursa(job #484849)

Utilizator MKLOLDragos Ristache MKLOL Data 15 septembrie 2010 23:59:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<fstream.h>
#define Nmax 500010
int h[Nmax],K,Q,N,o=0;
int tata(int k)
{
    return (k/2);
}
int fiu1(int k)
{
    return 2*k;
}
int fiu2(int k)
{
    return 2*k+1;
}

void swap(int x,int y)
{
    int aux;

    aux=h[x];
    h[x]=h[y];
    h[y]=aux;


}

int up_heap(int k)
{//afis();
    if(k==1)
    return 0;
    int t;
    t=tata(k);
    if(h[t]>h[k])
    {
    swap(k,t);
    up_heap(t);
    }

    return 0;
}

int down_heap(int k)
{//printf("%d\n",k);

    int s1=fiu1(k),s2=fiu2(k);
    if(s1<=K&&s2<=K)
    {
    if(h[s1]<h[s2])
    {
        if(h[k]>h[s1])
        {
            swap(k,s1);
            down_heap(s1);
        }
    }
    else if(s2<=K)
    {
        if(h[k]>h[s2])
        {
            swap(k,s2);
            down_heap(s2);
        }
    }
    }
    else if(s1<=K)
    {
        if(h[k]>h[s1])
        {
            swap(k,s1);
            down_heap(s1);
        }
    }


}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int x,y;
fin>>N;
for(int i=1;i<=N;++i)
{  fin>>h[i];
++K;
    up_heap(i);
}
for(int i=1;i<=N;++i)
{
    fout<<h[1]<<" ";
    h[1]=h[K--];

    down_heap(1);

}
return 0;
}