Cod sursa(job #1828446)

Utilizator castle2145Popa Catalin castle2145 Data 13 decembrie 2016 12:54:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
// heapsort

#include <fstream>
#define NIL 500001

using namespace std;

int a[NIL];
int heap_size;
int length;

int parent (int i)
{
    return i/2;
}

int left (int i)
{
    return 2*i;
}

int right (int i)
{
    return 2*i+1;
}

void max_heapify (int a[NIL], int i)
{
    int l=left(i);
    int r=right(i);
    int largest;
    if(l<=heap_size && a[l]>a[i])
        largest=l;
    else
        largest=i;
    if(r<=heap_size && a[r]>a[largest])
        largest=r;
    if(largest!=i)
    {
        int aux=a[i];
        a[i]=a[largest];
        a[largest]=aux;
        max_heapify(a,largest);
    }
}

void build_max_heap (int a[NIL])
{
    heap_size=length;
    int i;
    for(i=length/2; i>=1; i--)
        max_heapify(a,i);
}

void heap_sort(int a[NIL])
{
    build_max_heap(a);
    int i, aux;
    for(i=length;i>=2;i--)
    {
        aux=a[1];
        a[1]=a[i];
        a[i]=aux;
        heap_size--;
        max_heapify(a,1);
    }
}

int main()
{
    ifstream fin ("algsort.in");
    fin>>length;
    int i;
    for(i=1; i<=length; i++)
        fin>>a[i];
    fin.close();
    heap_sort(a);
    ofstream fout ("algsort.out");
    for(i=1; i<=length; i++)
        fout<<a[i]<<' ';
    fout.close();
    return 0;
}