Cod sursa(job #3124276)

Utilizator RORO123bBarbulescu Robert RORO123b Data 27 aprilie 2023 18:37:04
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>

using namespace std;

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

const int N=5e5;

int n,nh,h[N+1];

void coboara(int p)
{
    int fs=2*p,fd=2*p+1,bun=p;
    if(fs<=nh && h[fs]>h[bun])
        bun=fs;
    if(fd<=nh && h[fd]>h[bun])
        bun=fd;
    if(bun!=p)
    {
        swap(h[p],h[bun]);
        coboara(bun);
    }
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>h[i];
    }
    nh=n;
    //transformam h intr-un maxheap
    for(int i=n/2;i>=1;i--)
        coboara(i);
    //mutam repetat maximul la final
    for(int i=n;i>1;i--)
    {
        swap(h[1],h[i]);
        nh--;
        coboara(1);
    }
    for(int i=1;i<=n;i++)
        fout<<h[i]<<' ';
    return 0;
}