Cod sursa(job #475690)

Utilizator MKLOLDragos Ristache MKLOL Data 8 august 2010 00:20:15
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<stdio.h>
int k,v[501010];
void inter(int &a,int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}
void afis();
void down_heap(int j)
{

    long long minim=(1ll*1<<31)+2,minj=0;
    //printf("%lld!\n",minim);
    if(j*2<=k)
    if(v[j*2]<v[j])
        {   ;
            minim=v[j*2];
            minj=j*2;
        }


    if(j*2+1<=k)
    {

    if(v[j*2+1]<v[j])
    {

        if(v[j*2+1]<minim)
            {

                minim=v[j*2+1];
                minj=j*2+1;
            }
    }
    }
    if(minim!=(1ll*1<<31)+2)
    {
        inter(v[minj],v[j]);
        down_heap(minj);
    }
}
void pop()
{
    //afis();
    v[1]=v[k];
--k;

    down_heap(1);
  //  afis();
}


void up_heap(int j)
{
    if(j/2!=0)
    if(v[j/2]>v[j])
        {
            inter(v[j/2],v[j]);
            up_heap(j/2);
        }
}

void afis()
{
    for(int i=1;i<=k;++i)
        printf("%d ",v[i]);
    printf("\n");
}

int N,x;

int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
    {
    scanf("%d",&x);
    v[i]=x;
    up_heap(i);
    }
k=N;

    while(k>0)
    {

    printf("%d ",v[1]);

        pop();
    }



}