Cod sursa(job #1841485)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 5 ianuarie 2017 17:45:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<bits/stdc++.h>
#define maxN 500005
using namespace std;
int h[maxN],n,x;
void urca(int i)
{
    while(i>1)
    {
        if(h[i]>h[i/2]) swap(h[i],h[i/2]);
            else break;
        i>>=1;
    }
}
void coboara(int i,int n)
{
    int p,c;
    p=i;
    c=i<<1;
    while(c<=n)
    {
        if((c+1)<=n && h[c+1]>h[c]) c++;
        if(h[p]<h[c]) swap(h[p],h[c]);
            else break;
        p=c;
        c=p<<1;
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        h[i]=x;
        urca(i);
    }
    for(int i=n;i>=2;i--)
    {
        swap(h[1],h[i]);
        coboara(1,i-1);
    }
    for(int i=1;i<=n;i++) printf("%d ",h[i]);
    printf("\n");
    return 0;
}