Cod sursa(job #1315758)

Utilizator obidanDan Ganea obidan Data 13 ianuarie 2015 02:01:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;

const int NMax = 500002;
int H[NMax];
int Heapsize;
int n;
inline int left_child(int i)
{
 return i*2;
}
inline int right_child(int i)
{
    return i*2 +1;
}
inline int parent(int i)
{
    return i/2;
}
void MaxHeapify(int i)
{
 int l,r,largest;
 l= left_child(i);
 r= right_child(i);
 if(l<=Heapsize && H[l]> H[i])
    largest = l;
 else
    largest = i;
 if(r<=Heapsize && H[r]> H[largest])
    largest = r;
 if(largest != i)
 {
     swap(H[i],H[largest]);
     MaxHeapify(largest);
 }
}
void Build_Max_Heap()
{
    Heapsize = n;
    for(int i=n/2;i>=1;i--)
        MaxHeapify(i);

}


void HeapSort()
{
    int i;
    Build_Max_Heap();
    for(i=Heapsize; i>=2;i--)
    {
        swap(H[1],H[i]);
        Heapsize--;
        MaxHeapify(1);
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int i;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>H[i];
    }
    HeapSort();
    for(i=1;i<=n;i++)
        cout<<H[i]<<" ";

}