Cod sursa(job #363471)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 13 noiembrie 2009 15:21:23
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>

int h[500010],i,n,k;


void swap ( int i, int j)
{
  int aux;

   aux=h[i]; h[i]=h[j]; h[j]=aux;
}


int pozm ( int i, int n)
{

  if(i*2+1<=n)

   {
     if( h[i*2+1]>h[i*2] ) return i*2+1;

       else return i*2;
   }

   else return i*2;
}

void update ( int i, int n)

{
  if(i<=n/2)

   {
     k=pozm(i,n);

      if(h[k]>h[i])

	{

	  swap(k,i);

	  update(k,n);
	}
   }
}

void heap()
{
  int i;

   for(i=n/2;i>0;i--)

    update(i,n);
}

void heapsort()
{
 int i;
 heap();

  for(i=n;i>1;i--)

   {
     swap(1,i);
     update(1,i-1);
   }
}

int main()
{

  freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);

  scanf("%d",&n);


 for(i=1;i<=n;i++)
  scanf("%d",&h[i]);

 heapsort();

 for(i=1;i<=n;i++)
  printf("%d ",h[i]);

return 0;
}