Cod sursa(job #2271811)

Utilizator livliviLivia Magureanu livlivi Data 29 octombrie 2018 11:34:53
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include<fstream>
#define N 500000
using namespace std;

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

unsigned int vec[N+1];

void merge(unsigned int* v,int n){
	if (n==1) return ;

	//cout<<n<<endl;

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

	unsigned int aux[N+1];
	int a=0,b=(n+1)/2;

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

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

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

	merge(vec,n);

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

	return 0;
}