Cod sursa(job #1835096)

Utilizator xtreme77Patrick Sava xtreme77 Data 26 decembrie 2016 12:38:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>

using namespace std ;

const int MAX = 500002 ;

int v [ MAX ] ;

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

int aux [ MAX ] ; 

void Interclasare ( int a , int b , int c , int d )
{
	int start = a ; 
	int cate = 0 ; 
	while ( a <= b and c <= d ) {
		if ( v [ a ] < v [ c ] ) {
			++ cate ; 
			aux [ cate ] = v [ a ] ;
			++ a ; 
		}
		else {
			++ cate ;
			aux [ cate ] = v [ c ] ;
			++ c ; 
		}
	}
	while ( a <= b ) {
		++ cate ;
		aux [ cate ] = v [ a ] ;
		++ a ; 
	}
	while ( c <= d ) {
		++ cate ;
		aux [ cate ] = v [ c ] ;
		++ c ; 
	}
	for ( int i = 1 ; i <= cate ; ++ i ) {
		v [ start + i - 1 ] = aux [ i ] ;
	}
}

void SortMerge ( int st, int dr )
{
	if ( st == dr ) {
		return ;
	}
	if ( st + 1 == dr ) {
		if ( v [ st ] > v [ dr ] ) {
			swap ( v [ st ] , v [ dr ] ) ;
		}
		return ; 
	}
	int mij = ( st + dr ) / 2 ;
	SortMerge ( st , mij ) ;
	SortMerge ( mij + 1 , dr ) ;
	Interclasare ( st , mij , mij + 1 , dr ) ;
}


int main ( )
{
	int n ; 
	cin >> n ; 
	for ( int i = 1 ; i <= n ; ++ i ) {
		cin >> v [ i ] ;
	}
	SortMerge ( 1 , n ) ;
	for ( int i = 1 ; i <= n ; ++ i ) {
		cout << v [ i ] << ' ' ;
	}
	return 0 ;
}