Cod sursa(job #1156468)

Utilizator roxana.istratePoenaru Roxana roxana.istrate Data 27 martie 2014 18:23:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

int n;
vector<int> v;

void merge(int left, int m, int right, vector<int> empty){
	int i = left, j = m+1;
	while((i <= m) && (j <= right)){
		if(v.at(i) < v.at(j)){
			empty.push_back(v.at(i++));
		}
		if(v.at(i) >= v.at(j)){
			empty.push_back(v.at(j++));
		}
	}

	if(i > m){
		while(j <= right){
			empty.push_back(v.at(j++));
		}
	}
	if(j > right){
		while(i <= m){
			empty.push_back(v.at(i++));
		}
	}
	for(int i = left; i <= right; i++){
		v[i] = empty[i-left];
	}
}

void mergeSort(int left, int right, vector<int> empty){
	int m = left + (right - left)/2;
	if(left < right){
		mergeSort(left, m, empty);
		mergeSort(m+1, right, empty);
		merge(left, m, right, empty);
	}
}

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

	int elem;

	fin >> n;
	vector<int> empty;

	for(int i = 0 ; i < n; i++){
		fin >> elem;
		v.push_back(elem);
	}
	mergeSort(0,n-1, empty);

	for(int i = 0; i < n; i++){
		fout << v.at(i) <<" ";
	}
	fout << "\n";
	return 0;
}