Cod sursa(job #2740998)

Utilizator bananamandaoneTudor Cosmin Oanea bananamandaone Data 15 aprilie 2021 01:47:11
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

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

int n;
vector<int>a;

void Coboara(int poz)
{
    if(poz * 2 + 1 >= a.size())
        return;

    if((poz * 2 + 2 == a.size()) || (a[poz * 2 + 1] > a[poz * 2 + 2]))
    {
        if(a[poz * 2 + 1] > a[poz])
        {
            swap(a[poz], a[poz * 2 + 1]);
            Coboara(poz * 2 + 1);
            return;
        }
        else return;
    }
    else
    {
        if(a[poz * 2 + 2] > a[poz])
        {
            swap(a[poz], a[poz * 2 + 2]);
            Coboara(poz * 2 + 2);
            return;
        }
        else return;
    }
}

void HeapSort()
{
    int i;
    for(i = n - 1; i >= 0; i--)
    {
        swap(a[0], a[i]);
        a.pop_back();
        Coboara(0);
    }

    for(i = 0; i < n; i++)
        fout << a[i] << " ";
    fout << "\n";
}

void Heapify()
{
    int i, x;
    fin >> n;
    for(i = 0; i < n; i++)
    {
        fin >> x;
        a.push_back(x);
    }

    for(i = a.size() / 2; i >= 0; i--)
        Coboara(i);
}

int main()
{
    Heapify();
    HeapSort();

    fin.close();
    fout.close();
    return 0;
}