Cod sursa(job #1520273)

Utilizator jimcarterJim Carter jimcarter Data 8 noiembrie 2015 16:03:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
using namespace std;

FILE *f = fopen ( "algsort.in" , "r" ) , *g = fopen ( "algsort.out" , "w" );

const int MAX = 500005;
int Size , myInts [ MAX ] , i , aux [ MAX ];

void read()
{
    fscanf ( f , "%d" , &Size );
    for ( i = 0 ; i < Size ; i ++ )
        fscanf ( f , "%d" , &myInts [ i ] );
}

void print()
{
    for ( i = 0 ; i < Size ; i ++ )
        fprintf ( g , "%d " , myInts [ i ] );
}

void Union ( int left1 , int right1 , int left2 , int right2 , int targetL , int targetR )
{
	int i = left1 , j = left2 , size = 0;
	while ( i < right1 && j < right2 )
		if ( myInts [ i ] < myInts [ j ] )
			aux [ size ++ ] = myInts [ i ++ ];
		else
			aux [ size ++ ] = myInts [ j ++ ];

	while ( i < right1 )
		aux [ size ++ ] = myInts [ i ++ ];
	while ( j < right2 )
		aux [ size ++ ] = myInts [ j ++ ];

	for ( i = targetL ; i < targetR ; i ++ )
		myInts [ i ] = aux [ i - targetL ];
}

void mergeSort ( int left , int right )
{
	if ( left + 1 < right )
	{
		int mid = ( left + right ) / 2;
		mergeSort ( left , mid );
		mergeSort ( mid , right );
		Union ( left , mid , mid , right , left , right );
	}
}

int main()
{
    read();
    mergeSort ( 0 , Size );
    print();
    return 0;
}