Cod sursa(job #519933)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 6 ianuarie 2011 22:18:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#include<algorithm>
using namespace std;

int n,a[500002];

void read();
void heapsort();
void makeheap();
void combine(int i,int n);

int main()
{
  freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);
  read();
  heapsort();
  return 0;
}

void read()
{
  int i;
  scanf("%ld",&n);
  for (i=1;i<=n;scanf("%ld",&a[i]),++i);
}

void heapsort()
{
  int i;
  makeheap();
  for (i=n;i>=1;--i)
  {
    printf("%ld ",a[1]);
    swap(a[1],a[i]);
    combine(1,i-1);
  }
}

void makeheap()
{
  int i;
  for (i=n/2;i;--i)
    combine(i,n);
}

void combine(int i,int n)
{
  int aux,c,t;
  aux=a[i];
  t=i;
  c=2*i;
  while (c<=n)
  {
    if (c+1<=n&&a[c+1]<a[c]) ++c;
    if (aux>a[c])
    {
      a[t]=a[c];
      t=c;
      c*=2;
    }
    else c=n+1;
  a[t]=aux;
  }
}