Cod sursa(job #1041955)

Utilizator denisx304Visan Denis denisx304 Data 26 noiembrie 2013 13:34:16
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
int a[500001],b[500001],n;
FILE *f,*g;
void verifica(i)
{
    int aux;
    if (i/2>=1)
        if (b[i]<b[i/2])
    {
        aux=b[i];
        b[i]=b[i/2];
        b[i/2]=aux;
        verifica(i/2);
    }
}
void corect(i)
{
   int minim,aux;
   if (2*i<=n)
   {
       if (2*i+1<=n)
       {
            if (b[i]>b[2*i]||b[i]>b[2*i+1])
            minim=2*i;
            if (b[2*i+1]<b[2*i]) minim=2*i+1;
            aux=b[i];
            b[i]=b[minim];
            b[minim]=aux;
            corect(minim);
       }
       else
        if (b[i]>b[2*i])
          {
            aux=b[i];
            b[i]=b[2*i];
            b[2*i]=aux;
            corect(2*i);
          }
   }

}
int main()
{

    int i;
    f=fopen("algsort.in","r");
    g=fopen("algsort.out","w");
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(f,"%d",&a[i]);
    fclose(f);
    b[1]=a[1];
    for (i=2;i<=n;i++)
    {
        b[i]=a[i];
        verifica(i);
    }
    while (n>0)
    {
    fprintf(g,"%d ",b[1]);
    b[1]=b[n];
    n--;
    corect(1);
    }
    fclose(g);
    return 0 ;
}