Cod sursa(job #2282207)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 13 noiembrie 2018 14:17:16
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <iostream>
using namespace std;

#define NMAX 500001
#define INFI 0x3f3f3f3f

int V[ NMAX ] = { INFI };
int dim;

void insert_heap( int k ) {
    int i = ++dim;
    V[ dim ] = k;

    while ( i > 1 && V[ i ] < V[ i / 2 ] ) {
        swap( V[ i ], V[ i / 2 ] );
        i /= 2;
    }
}

void pop() {

    int ma, j, i = 1;

    swap( V[ 1 ], V[ dim ] );
    V[ dim ] = INFI;
    dim--;

    while ( i < dim && ( V[ i ] > V[ 2 * + 1 ] || V[ i ] > V[ 2 * i ] ) ) {
        if ( 2 * i <= dim && V[ 2 * i ] < V[ 2 * i + 1 ] ) swap( V[ i ], V[ 2 * i ] ), i = 2 * i;
        else if ( 2 * i + 1 <= dim ) swap( V[ i ], V[ 2 * i + 1 ] ), i = 2 * i + 1;
        else i = dim;
    }


}

int main () {

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

    int n, i, k;

    scanf( "%d", &n );
    for ( i = 1; i <= n; ++i ) {
        scanf( "%d", &k );
        insert_heap( k );
    }

    for ( i = 1; i <= n; ++i ) {
        printf( "%d ", V[ 1 ] );
        pop();
    }

    return 0;
}