Cod sursa(job #554989)

Utilizator mihaionlyMihai Jiplea mihaionly Data 15 martie 2011 10:57:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
using namespace std;
#define NMAX 500001
FILE *fin=fopen("algsort.in","r");
FILE *fout=fopen("algsort.out","w");
int H[NMAX],n;
void swap(int &x,int &y)
 {
 int ax=x;
 x=y;
 y=ax;
 }
void upheap(int i)
 {
 if(i>1)
  {
  if(H[i/2]>H[i])
   {
   swap(H[i],H[i/2]);
   upheap(i/2);
   }
  }
 }
void dwheap(int i)
 {
 if(2*i<=n)
  {
  int y=2*i;
  if(y+1<=n&&H[y+1]<H[y])
   ++y;
  if(H[y]<H[i])
   {
   swap(H[y],H[i]);
   dwheap(y);
   }
  }
 }
int main()
 {
 int i;
 fscanf(fin,"%d",&n);
 for(i=1;i<=n;i++)
  {
  fscanf(fin,"%d",&H[i]);
  upheap(i);
  }
 while(n>0)
  {
  fprintf(fout,"%d ",H[1]);
  swap(H[1],H[n]);
  H[n]=0;
  --n;
  dwheap(1);
  }
 return 0;
 }