Cod sursa(job #349268)

Utilizator mihaionlyMihai Jiplea mihaionly Data 18 septembrie 2009 20:26:32
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
#define nmax 500001
long long H[200];
unsigned n;
inline int father(int x)
 {
 return x/2;
 }
inline int son1(int x)
 {
 return 2*x;
 }
inline int son2(int x)
 {
 return 2*x+1;
 }
void up_up(long long H[],int k,int n)
 {
 while(k>1&&H[father(k)]>H[k])
  {
  swap(H[father(k)],H[k]);
  k=father(k);
  }
 }
void down(long long H[],int k,int n)
 {
 while(son1(k)<=n&&H[k]>=H[son1(k)])
  {
  if(son2(k)<=n&&H[son2(k)]<H[son1(k)])
   {
   swap(H[k],H[son2(k)]);
   k=son2(k);
   }  
  else
   {
   swap(H[k],H[son1(k)]);
   k=son1(k);
   }
  }
 }
int main()
 {
 f>>n;
 int nn;
 for(int i=1;i<=n;i++)
  {
  f>>H[i];
  up_up(H,i,n);
  }
 nn=n;
 while(nn>0)
  {
  swap(H[1],H[nn]);
  nn--;
  down(H,1,nn);
  }
 for(int i=n;i>=1;i--)
  g<<H[i]<<" ";
 }