Cod sursa(job #960017)

Utilizator promix2012petruta andrei promix2012 Data 9 iunie 2013 16:28:17
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#include <stdlib.h>
int v[1000002],n;
FILE *f,*g;
int div1(int a,int b)
{
    return (int)(a/b);
}
void adaugare_heap(int i,int nr)
{
  v[i]=nr;
  int tat,aux;
  tat=div1(i,2);
  while((v[i]>v[tat])&&(i!=1))
  {
     aux=v[i];
     v[i]=v[tat];
     v[tat]=aux;
     i=tat;
     tat=div1(tat,2);
  }
}
int idmax(int i)
{
    if(v[2*i]>v[2*i+1])
        return 2*i;
    else
    return 2*i+1;

}
void restruct_heap()
{
   fprintf(g,"%d ",v[1]);
   v[1]=v[n];
   n--;
   int aux=1;
   int aux1=0;
   while(aux<n)
   {
       int id=idmax(aux);
      if(v[aux]<v[id])
      {
        aux1=v[aux];
        v[aux]=v[id];
        v[id]=aux1;
        aux=id;
      }
      else
        break;

   }

}
void creare_heap()
{
    int i,nr;
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        adaugare_heap(i,nr);
    }
int     n1=n;
        while(n>0)
    {
          restruct_heap();
    }
}

void afisare()
{
    int i;
    for(i=1;i<=n;i++)
        printf("%d ",v[i]);
}
int main()
{
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
creare_heap();
afisare();


fclose(f);
fclose(g);
}