Cod sursa(job #1866203)

Utilizator xtreme77Patrick Sava xtreme77 Data 2 februarie 2017 18:55:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std ;

const int MAX = 5e5 + 14 ;

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

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

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

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

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