Cod sursa(job #1108788)

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

using namespace std;

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

int n , i , vect[500005] , temp[500005] ;

void merge ( int left_1 , int right_1 , int left_2 , int right_2 )
{
    int pos_1 = left_1 ; int pos_2 = left_2 ; int nr = left_1 ;

    while ( pos_1 <= right_1 && pos_2 <= right_2 )
    {
        if ( vect[pos_1] < vect[pos_2] ) { temp[nr] = vect[pos_1] ; pos_1 ++ ; }
        else { temp[nr] = vect[pos_2] ; pos_2 ++ ; }

        nr ++ ;
    }

    while ( pos_1 <= right_1 ) { temp[nr] = vect[pos_1] ; pos_1 ++ ; nr ++ ; }
    while ( pos_2 <= right_2 ) { temp[nr] = vect[pos_2] ; pos_2 ++ ; nr ++ ; }

    for ( i = left_1 ; i <= right_2 ; i ++ )
    {
        vect[i] = temp[i] ;
    }
}

void merge_sort ( int left , int right )
{
    int middle ;

    if ( left == right ) { return; }

    middle = ( left + right ) / 2 ;

    merge_sort ( left , middle ) ;
    merge_sort ( middle + 1 , right ) ;

    merge ( left , middle , middle + 1 , right ) ;
}

int main()
{
    in >> n ;

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

    merge_sort ( 1 , n ) ;

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

    return 0;
}