Cod sursa(job #678604)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 11 februarie 2012 23:27:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
//Mergesort
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define file_in "algsort.in"
#define file_out "algsort.out"

int N,X;
vector<int> V;

void interclasare(vector<int> &V, int left, int middle, int right){
	
	int i=left;
	int j=middle+1;
	vector<int> VV;
	
	while(i<=middle && j<=right){
		
		if (V[i]<V[j]){
			VV.push_back(V[i]);
			i++;
		}
		else{
			VV.push_back(V[j]);
			j++;
		}
	}
	
	while(i<=middle){
		VV.push_back(V[i]);
		i++;
	}
	
	while(j<=right){
		VV.push_back(V[j]);
		j++;
	}
	
	i=left;
	for (vector<int> :: iterator it=VV.begin();it!=VV.end();++it)
		 V[i++]=(*it);
}

void mergesort(vector<int> &V, int left, int right){
	
	int middle;
	
	if (left<right){
		middle=(left+right)/2;
		mergesort(V,left,middle);
		mergesort(V,middle+1,right);
		interclasare(V,left,middle,right);
	}
}

int main(){
	
	int i;
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &N);
	
	for (i=0;i<N;++i){
		scanf("%d", &X);
		V.push_back(X);
	}
	
	mergesort(V,0,N-1);
	
	for (i=0;i<N;++i)
		 printf("%d ", V[i]);
	
	return 0;
}