Cod sursa(job #1867918)

Utilizator xtreme77Patrick Sava xtreme77 Data 4 februarie 2017 13:53:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std ;

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

const int MAX = 5e5 + 14 ;

int v[MAX] ;
int aux[MAX] ;

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

void MS ( int i , int j )
{
	if ( i == j ) 
		return ; 
	if ( i == j - 1 ) 
		if ( v[i] > v [j] ) 
			swap (v[i],v[j]) ;
	int mij = ( i + j ) >> 1 ; 
	MS (i, mij) ;
	MS (mij + 1, j) ;
	Inter (i, mij, j) ;
}

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