Cod sursa(job #1044939)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 30 noiembrie 2013 17:19:11
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int i,j,m,n,h[500003];
void swap(int k, int t)
{
   int x;
   x=h[t];
   h[t]=h[k];
   h[k]=x;
}
void HeapUp(int k)
{
   int t;
   if(k<=1) return;
   t=k/2;
   if(h[k]>h[t])
   {
       swap(k,t);
       HeapUp(t);
   }
}
void HeapDw(int r, int k)
{
   int St,Dr,i;
   if(2*r<=k)
   {
       St=h[2*r];
       if(2*r+1<=k) Dr=h[2*r+1];
       else Dr=St-1;
       if(St>Dr) i=2*r;
       else i=2*r+1;
       if(h[r]<h[i])
       {
           swap(r,i);
           HeapDw(i,k);
       }
   }

}
void HeapSort(int k)
{
   while(k>1)
   {
       swap(1,k); k--;
       HeapDw(1,k);
   }

}
int main()
{
   f>>n;
   for(i=1; i<=n; i++)
   f>>h[i];
   for(i=2; i<=n; i++)
   HeapUp(i);
   HeapSort(n);
   for(i=1; i<=n; i++)
   g<<h[i]<<' ';
   g<<'\n';

   return 0;
}