Cod sursa(job #2713771)

Utilizator Ionut_neuer58Raducu Ioan Stefan Ionut_neuer58 Data 28 februarie 2021 16:26:10
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
///#include <iostream>
#include <fstream>

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

int v[500010], n;

void upHeap(int node)
{
    int nav=node;
    while(nav>1)
    {
        if(v[nav/2]>v[nav]) return;
        swap(v[nav], v[nav/2]);
        nav/=2;
    }
}

void downHeap(int node)
{
    int w=node*2;
    while(w<=n)
    {
        if(w<n && v[w]<v[w+1]) w++;
        if(v[w]<v[w/2]) return;
        swap(v[w], v[w/2]);
        w*=2;
    }
}

void sortHeap()
{
    int n1=n;
    while(n-- >1)
    {
        swap(v[1], v[n+1]);
        downHeap(1);
    }
    n=n1;
}

int main()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i], upHeap(i);
    sortHeap();
    for(int i=1; i<=n; i++)
        cout<<v[i]<<' ';
    return 0;
}