Cod sursa(job #1558154)

Utilizator AlexVolatiluVoicu Alex AlexVolatilu Data 28 decembrie 2015 19:38:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

using namespace std;

int n;
int v[500005];

void creare_heap()
{
    int i,j,k,h;
    scanf("%d",&(v[1]));
    for(j=2;j<=n;j++)
    {
        scanf("%d",&(v[j]));
        i=j;
        while(i>1)
        {
            h=i>>1;
            if(v[i]>v[h]) {k=v[h];v[h]=v[i];v[i]=k;i=h;}
            else break;
        }
    }
}

int extrage()
{
    int i=1,j,k,x=v[1];
    v[1]=v[n--];
    while(i*2<=n)
    {
        j=i*2;
        if(j+1<=n&&v[j+1]>v[j]) j++;
        if(v[j]>v[i]) {k=v[i];v[i]=v[j];v[j]=k;i=j;}
        else break;
    }

    return x;
}

void hsort()
{
    int k=n,i;
    for(i=n;i>1;i--)
        v[i]=extrage();
    n=k;
}

void tipar()
{
    for(int i=1;i<=n;i++)
        printf("%d ",v[i]);
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    creare_heap();
    hsort();
    tipar();
    return 0;
}