Cod sursa(job #1460757)

Utilizator glbglGeorgiana bgl glbgl Data 13 iulie 2015 20:24:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 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<long 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 j = 1; j <= n2; ++j)
        D[j] = v[m+j];
    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){
        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();
}