Cod sursa(job #360240)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 30 octombrie 2009 18:15:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream.h>


int h[500010],i,n;


void schimb(int &i, int &j)
{

 int aux;
 aux=i; i=j; j=aux;
}

int pozmax (int i, int n)

 {

   if(2*i+1<=n)

    {

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

		       else return 2*i+1;
    }
    else return 2*i;
 }

void divide (int i, int n)

 {
   int k;

    if(i<=n/2)

     {

      k=pozmax(i,n);

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

       {
	 schimb(h[k],h[i]);
	 divide(k,n);
       }
     }
 }


void heap()
{
  for(int i=n/2; i>0; i--)

      divide(i,n);
}


void heapsort()

{
  heap();

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

  {
   schimb(h[1],h[i]);
   divide(1,i-1);
  }
}

int main()
{

ifstream f("algsort.in");
ofstream g("algsort.out");

f>>n;

for(i=1;i<=n;i++) f>>h[i];

heapsort();

for(i=1;i<=n;i++) g<<h[i]<<" ";


return 0;
}