Cod sursa(job #261647)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 18 februarie 2009 16:57:56
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>
#define N 500001
#define st(x) (2*(x))
#define dr(x) (2*(x)+1)
int heap[N],n;
void up(int i)
{int aux;
 if(st(i)<=n&&heap[st(i)]>heap[i])
 {aux=heap[st(i)];heap[st(i)]=heap[i];heap[i]=aux;
  if(st(i)<=n/2)
  {up(st(i));
  }
 }
 if(dr(i)<=n&&heap[dr(i)]>heap[i])
 {aux=heap[dr(i)];heap[dr(i)]=heap[i];heap[i]=aux;
  if(dr(i)<=n/2)
  {up(dr(i));
  }
 }
}
void heapsort()
{int i,aux;
 for (i=n/2;i>=1;i--)
 {up(i);}

 for (;n>=1;)
 {aux=heap[n];
  heap[n]=heap[1];
  heap[1]=aux;
  n--;
  up(1);
 }
}

int main ()
{freopen("algsort.in","r",stdin);
 freopen("algsort.out","w",stdout);
 int i,m;
 scanf("%d",&n);
 m=n;
 for(i=1;i<=n;i++)
 {scanf("%d",&heap[i]);
 }
 heapsort();
 for (i=1;i<=m;i++)
 {printf("%d ",heap[i]);
 }

 return 0;
}