Cod sursa(job #2091535)

Utilizator AndreiMaximIonutMaxim Andrei AndreiMaximIonut Data 19 decembrie 2017 20:04:26
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

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

int n, v[500001];

inline void swapy(int &a, int &b)
{
    int aux = a;
    a = b;
    b = aux;
}

void Insert_Heap(int i)
{
    int tata, fiu = i;

    tata = fiu / 2;

    while(tata > 0 && v[tata] < v[fiu])
    {
        swapy(v[tata], v[fiu]);

        fiu = tata;
        tata = fiu / 2;
    }
}

void HeapSort(int i)
{
    int tata, fiu;

    swapy(v[1], v[i]);

    tata = 1;
    fiu = 2;

    while(fiu < i)
    {
        if(fiu + 1 < i && v[fiu + 1] > v[fiu]) fiu++;

        if(v[fiu] > v[tata])
        {
            swapy(v[fiu], v[tata]);

            tata = fiu;
            fiu = fiu * 2;
        }

        else fiu = i;

    }
}

int main()
{
    int i;

    fin>>n;
    for(i = 1; i <= n; ++i)
        fin>>v[i];

    for(i = 2; i <= n; ++i)
        Insert_Heap(i);

    for(i = n; i > 1; --i)
        HeapSort(i);

    for(i = 1; i <= n; ++i) fout<<v[i]<<' ';

    return 0;
}