Cod sursa(job #1312820)

Utilizator Denisa13Stefan Denisa Denisa13 Data 9 ianuarie 2015 23:00:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;
long a[500005];
ifstream f("algsort.in");
ofstream g("algsort.out");
void max_heap_cond(long i, long n)
{
    int max;
    if(n>=2*i && a[i]<=a[2*i])
        max=2*i;
    else max=i;
    if(n>=2*i+1 && a[max]<=a[2*i+1])
        max=2*i+1;
    if(max!=i)
    {
        swap(a[i],a[max]);
        max_heap_cond(max,n);
    }
}
void build_max_heap(long n)
{
    long i;
    for(i=n/2;i>=1;i--)
        max_heap_cond(i,n);
}
void heapsort(long n)
{
    build_max_heap(n);
    long i;
    for(i=n;i>=2;i--)
    {
        swap(a[1],a[i]);
        max_heap_cond(1,i-1);
    }
}
int main()
{
    long n,i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    heapsort(n);
    for(i=1;i<=n;i++)
        g<<a[i]<<' ';
    return 0;
}