Cod sursa(job #2270138)

Utilizator anamaria41Raicu Ana anamaria41 Data 27 octombrie 2018 09:37:58
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int h[500050],n,i;


void HeapUp( int x)
{
    if (x>1) {
        if ( h[x] > h[x/2] )
            {
            swap (h[x], h[x/2]);
            HeapUp(x/2);
        }

    }
}

void HeapDw ( int x, int m )
 {
    int st=0, dr=0;

    if ( 2*x<=m )
    {
        st=h[2*x];
        if ( 2*x+1 <=m )
            dr=h[2*x+1];
        else dr=st-1;

    if (st>dr && h[x]<st)
        {
        swap(h[x], h[2*x]);
        HeapDw(2*x,m);
    }
        else if (h[x]<dr) {
        swap(h[x], h[2*x+1]);
        HeapDw(2*x+1,m);

    }
    }
}


int main() {
    freopen ("algsort.in", "r", stdin);
    freopen ("algsort.out", "w", stdout);


    scanf ("%d", &n);
    for( i=1; i<=n; i++ ) {
        scanf ("%d", &h[i]);
        HeapUp(i);

    }

    int aux=n;

    while ( aux >1 ) {
        swap(h[1], h[aux]);
        aux--;
        HeapDw (1, aux);
    }


    for(i=1; i<=n; i++ )
        printf ("%d ", h[i]);


    return 0;
}