Cod sursa(job #1315540)

Utilizator simaghitaSima Gheorghe Eugen simaghita Data 12 ianuarie 2015 21:44:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include<fstream>
using namespace std;
int a[500010],heap[500010],n,dim;
void reconstitue_heap(int i)
{
    int maxim;
    int st=2*i;
    int dr=2*i+1;
    if(st<=dim && a[st] > a[i])
        maxim=st;
    else
        maxim=i;
    if(dr<=dim && a[dr] > a[maxim])
        maxim=dr;
    if(maxim!=i)
    {
        int aux=a[i];
        a[i]=a[maxim];
        a[maxim]=aux;
        reconstitue_heap(maxim);
    }


}
void build_heap()
{
    dim=n;
    for(int i=(n>>1);i>=1;--i)
        reconstitue_heap(i);
}
void heap_sort()
{
    build_heap();
    for(int i=n;i>=2;--i)
    {
        int aux=a[1];
        a[1]=a[i];
        a[i]=aux;
        --dim;
        reconstitue_heap(1);
    }
}
void afisare()
{
    ofstream fout("algsort.out");
    for(int i=1;i<=n;++i)
        fout<<a[i]<<" ";
    fout<<"\n";
    fout.close();
}
void citire()
{
    ifstream fin("algsort.in");
    fin>>n;
    for(int i=1;i<=n;++i)
        fin>>a[i];
    fin.close();
}
int main()
{
    citire();
    heap_sort();
    afisare();
    return 0;
}