Cod sursa(job #475689)

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

    int minim=1>>31,minj=0;
    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!=1>>31)
    {
        inter(v[minj],v[j]);
        down_heap(minj);
    }
}
void pop()
{
    v[1]=v[k];
--k;

    down_heap(1);
}


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);
        }
}

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("!");
    printf("%d ",v[1]);

        pop();
    }



}