Cod sursa(job #2272648)

Utilizator livliviLivia Magureanu livlivi Data 30 octombrie 2018 15:40:39
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include<fstream>
#define N 500000
using namespace std;

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

unsigned int v[N+100];
unsigned int aux[N+1];

void merge(int st,int n){
	if (st+1>=n) return ;

	//cout<<st<<' '<<n<<endl;

	merge(st,(st+n+1)/2);
	merge((st+n+1)/2,n);

	int a=st,b=(st+n+1)/2;

	for(int i=0;i<n-st && (a<(st+n+1)/2 || b<n);i++){
		if (a>=(st+n+1)/2){
			aux[i]=v[b];
			b++;
		}
		else
		if (b>=n){
			aux[i]=v[a];
			a++;
		}
		else
		if (v[a]<v[b]){
			aux[i]=v[a];
			a++;
		}
		else {
			aux[i]=v[b];
			b++;
		}
	}

	for(int i=0;i<n-st;i++)
		v[st+i]=aux[i];
}

int main(){
	int n;
	cin>>n;

	for(int i=0;i<n;i++)
		cin>>v[i];

	merge(0,n);

	for(int i=0;i<n;i++)
		cout<<v[i]<<' ';
	cout<<endl;

	return 0;
}