Cod sursa(job #1460680)

Utilizator glbglGeorgiana bgl glbgl Data 13 iulie 2015 15:36:59
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <fstream>
#include <vector>
  
#define INF 1<<30
 
using namespace std;
  
ifstream in("algsort.in");
ofstream out("algsort.out");
  
int N;
vector<long> v;
  
void read(){
  
    in >> N;
    long long 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<long long> S(n1+2);
	vector<long long> D(n2+2);

	for(int i = 1; i <= n1; ++i)
		S[i] = v[l+i-1];
	for(int i = 1; i<= n2; ++i)
		D[i] = v[m+i];

	S[n1+1] = 1LL*INF;
	D[n2+1] = 1LL*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) return;

	int m = l + (r - l)/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(){
  
  	ios::sync_with_stdio(false);

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