Cod sursa(job #3153985)

Utilizator proflaurianPanaete Adrian proflaurian Data 2 octombrie 2023 16:56:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N=500010;
int n,a[N];
void heapDown(int,int);
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>a[i];

    /// asez elementele in max-heap
    for(int i=n/2;i>=1;i--)
        heapDown(i,n);

    for(int i=n;i>=1;i--)
    {
        swap(a[1],a[i]);
        heapDown(1,i-1);
    }

    for(int i=1;i<=n;i++)
        g<<a[i]<<' ';
    g<<'\n';


    return 0;
}
void heapDown(int tata,int lg)
{
    int fiu=2*tata; /// iau fiul stanga
    if(fiu>lg)return; /// daca tata e frunza e ok < nu am nimic dedesupt
    if(fiu<lg&&a[fiu+1]>a[fiu])fiu++;
        /// daca fiul dreapta are mai mult aleg fiul dreapta
    if(a[fiu]>a[tata]){swap(a[fiu],a[tata]);heapDown(fiu,lg);}
}