Cod sursa(job #1460422)

Utilizator glbglGeorgiana bgl glbgl Data 12 iulie 2015 17:25:31
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <fstream>
#include <vector>

#define INF 1<<31

using namespace std;

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

int N, M;
vector<int> v;

void read(){

	in >> N;
	int x;
	v.resize(N+1);
	for(int i = 1; i <= N; ++i){
		in >> x;
		v[i] = x;
	}
}

void Merge(int l, int m, int r){

	int n1 = m-l+1;
	int n2 = r-m;
	vector<int> S(n1+2);
	vector<int> D(n2+2);
	for(int i = 1; i <= n1; ++i)
		S[i] = v[l+i-1];
	for(int j = 1; j <= n2; ++j)
		D[j] = v[m+j];
	S[n1+1] = INF;
	D[n2+1] = INF;
	int i = 1, j = 1;
	for(int k = l; k <= r; ++k){
		if(S[i] <= D[j]){
			v[k] = S[i];
			i++;
		}
		else{
			v[k] = D[j];
			j++;
		}
	}
}


void MergeSort(int l, int r){

	if( l < r){
		int m = (l+r)/2;
		MergeSort(l, m);
		MergeSort(m+1, r);
		Merge(l, m, r);
	}
}

void write(){

	for(int i = 1; i <= N; ++i)
		out << v[i] << " ";
}

int main(){

	read();
	MergeSort(1, N);
	write();
}