Cod sursa(job #358460)

Utilizator mihaionlyMihai Jiplea mihaionly Data 23 octombrie 2009 10:01:53
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
#define NMAX 500001
using namespace std;
long int a[NMAX],n,nh;
inline void swap(long &x,long &y)
 {
 long aux=x;
 x=y;
 y=aux;
 }
void down(int x)
 {
 int y=x;
 while(y)
  {
  y=0;
  if(2*x<=nh)
   {
   y=2*x;
   if(2*x+1<=nh&&a[2*x]<a[2*x+1])
    y=2*x+1;
   if(a[x]<a[y])
    {
	swap(a[x],a[y]);
    x=y;
    }
   else
	y=0;
   }
  }
 }
void makeheap()
 {
 for(int i=nh/2;i>0;i--) down(i);
 }
void heapsort()
 {
 while(nh)
  {
  swap(a[nh],a[1]);
  nh--;
  down(1);
  }
 }
int main()
 {
 ifstream f("algsort.in");
 ofstream g("algsort.out");
 f>>n;
 int i;
 nh=n;
 for(i=1;i<=n;i++) f>>a[i];
 makeheap();
 heapsort();
 for(i=1;i<=n;i++) g<<a[i]<<" ";
 return 0;
 }