Cod sursa(job #480725)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 29 august 2010 13:29:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <algorithm>
using namespace std;
int a[500005],n,heapsize;
void heapify(int i)
{
  int right,largest,left;
  largest=i;
  left=i*2; right=i*2+1;
  if(left<=heapsize and a[left]>a[i]) largest=left;
  if(right<=heapsize and a[right]>a[largest]) largest=right;
  if(largest!=i) { swap(a[i],a[largest]); heapify(largest); }
}
void buildheap(void)
{
  int i;
  for(i=heapsize/2+1;i>0;i--) heapify(i);
}
void extractmax(void)
{
  swap(a[1],a[heapsize]);
  heapsize--;
  heapify(1);
}
void heapsort(void)
{
  while(heapsize>1)
  {
    extractmax();
  }
}
int main()
{
    int i;
    ifstream fi("algsort.in");
    ofstream fo("algsort.out");
    fi>>n;
    for(i=1;i<=n;i++) fi>>a[i];
    heapsize=n;
    buildheap();
    heapsort();
    for(i=1;i<=n;i++) fo<<a[i]<<" ";

    return 0;
}