Cod sursa(job #806907)

Utilizator MtkMarianHagrSnaf MtkMarian Data 3 noiembrie 2012 18:22:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>



#define NMAX 500005
int vector[ NMAX ]  , b[ NMAX ]  , n ;
void msort(int left , int right , int m)
{

	int k1 = left , k2 = m+1 , k3 = left  ;
	while ( (k1 <= m) && (k2 <= right ) )
	{
		if(vector[ k1 ] <= vector[ k2 ] ) 	b[ k3++ ] = vector [ k1++ ] ; 
			else b[ k3++ ] = vector [ k2++ ] ;
	}

	if( k1 > m  )
		for( int i = k2 ; i <= right ; ++i )
			b[ k3++ ] = vector [ i ] ;
	else
		for( int i = k1 ; i <= m ; ++i )
			b[ k3++ ] = vector [ i ] ;
	for(int i=left ; i<=right ; ++i)
		vector[i] = b[i] ;

}
void  merge ( int left ,int right )
{
	if(left == right )return;
	else
	{

		 int m = left+ (right-left)/2 ;
		 merge( left , m );
		 merge( m+1 , right );
		 msort( left , right , m) ;

	}


}

void citeste ()
{
	scanf("%d",&n);
	for ( int i = 1 ; i <= n ; ++i) 
			scanf("%d",&vector[i]);


}
void scrie ()
{
	for(int i=1 ; i <= n ; ++i ) 	
		printf("%d " , vector[i] );
}
int main()
{
	freopen("algsort.in" , "r" , stdin);
	freopen("algsort.out" , "w" , stdout); 

	citeste();

	merge( 1 , n );

	scrie();

	return 0 ;
}