Cod sursa(job #2077059)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 27 noiembrie 2017 17:45:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int h[500005];
int n,nh,r,i,x,aux;
void urcare(int p)
{
    int aux;
    while(p>=2 && h[p/2]<h[p])
    {
        aux=h[p];
        h[p]=h[p/2];
        h[p/2]=aux;
        p=p/2;
    }
}
void coborare(int p,int nh)
{
    int aux;
    while(p*2<=nh)
    {
        r=p*2;
        if(r+1<=nh && h[r+1]>h[r])
        {
            r=r+1;
        }
        if(h[p]<h[r])
        {
            aux=h[p];
            h[p]=h[r];
            h[r]=aux;
            p=r;
        }
        else
        {
            break;
        }
    }
}
int main()
{
    fin>>n;
    nh=0;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        nh++;
        h[nh]=x;
        urcare(nh);
    }
    for(i=nh;i>=2;i--)
    {
        aux=h[1];
        h[1]=h[i];
        h[i]=aux;
        nh--;
        coborare(1,nh);
    }
    for(i=1;i<=n;i++)
    {
        fout<<h[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}