Cod sursa(job #779245)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 17 august 2012 10:14:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>
int a[500004],nr,nr2,ok,n,m,aux;
void heap_up(int i)
{
    if (i>1)
        if (a[i]<a[i/2])
        {
            aux=a[i];
            a[i]=a[i/2];
            a[i/2]=aux;
            heap_up(i/2);
        }
}
void heap_down(int i)
{
    if (i*2<n)
    {
        if (a[i]>a[i*2]&&a[i*2]<a[i*2+1])
        {
            aux=a[i];
            a[i]=a[i*2];
            a[i*2]=aux;
            heap_down(i*2);
        }
        else
        if (a[i]>a[i*2+1])
        {
            aux=a[i];
            a[i]=a[i*2+1];
            a[i*2+1]=aux;
            heap_down(i*2+1);
        }
    }
}
int main()
{
    int i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    nr2=n;
    for (i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        heap_up(i);
    }
    for (i=1;i<=nr2;i++)
    {
        printf("%d ",a[1]);
        a[1]=a[n];
        a[n]=-1;
        n--;
        heap_down(1);
        if (n==2) if (a[1]>a[2]) {aux=a[2]; a[2]=a[1]; a[1]=aux;}
    }
    return 0;
}