Cod sursa(job #2292110)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 28 noiembrie 2018 23:03:42
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define NMAX 500004
using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

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

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

void heapdown(int a[], int n, int i)
{
    int l=leftson(i);
    int r=rightson(i);
    int vmax = i;

    if(l <= n && a[vmax] < a[l])
    {
        vmax = l;
    }

    if(r <= n && a[vmax] < a[r])
    {
        vmax = r;
    }

    if(vmax != i)
    {
        swap(a[vmax], a[i]);
        heapdown(a, n, vmax);
    }
}

int heap[NMAX], n, i;

int main()
{
    fin >> n;

    for (i = 1; i <= n; i++)
    {
        fin >> heap[i];
    }

    for (i = n/2; i >= 1; i--)
    {
        heapdown(heap, n, i);
    }

    for (i = n; i >= 1; i--)
    {
        swap(heap[1], heap[i]);
        heapdown(heap, i - 1, 1);
    }

    for(i = 1; i <= n; i++)
    {
        fout << heap[i] << " ";
    }
    fin.close();
    fout.close();
    return 0;
}