Cod sursa(job #1109171)

Utilizator techLaurentiu Avasiloaie tech Data 16 februarie 2014 19:49:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>

using namespace std;

ifstream in ( "algsort.in" ) ;
ofstream out ( "algsort.out" ) ;

int n , i , vect[500005] ;

void swap ( int x , int y )
{
    int aux = 0 ;
    aux = vect[x] ;
    vect[x] = vect[y] ; vect[y] = aux ;
}

void max_heapify ( int n , int i )
{
    int left , right , largest = 0 ;

    left = 2*i ; right = 2*i + 1 ;

    if ( left <= n && vect[left] > vect[i] ) { largest = left ; } else { largest = i ; }
    if ( right <= n && vect[right] > vect[largest] ) { largest = right ; }

    if ( largest != i ) { swap ( i , largest ) ; max_heapify ( n , largest ) ; }
}

void build_heap ( int n )
{
    for ( int i = n/2 ; i > 0 ; i -- )
    {
        max_heapify ( n , i ) ;
    }
}

void heapsort ( int n )
{
    build_heap ( n ) ;

    for ( int i = n ; i >= 2 ; i -- )
    {
        swap ( 1 , i ) ;
        max_heapify ( i - 1 , 1 ) ;
    }
}


int main()
{
    in >> n ;

    for ( i = 1 ; i <= n ; i ++ )
    {
        in >> vect[i] ;
    }

    heapsort ( n ) ;

    for ( i = 1 ; i <= n ; i ++ )
    {
        out << vect[i] << " " ;
    }


    return 0;
}