Cod sursa(job #1460648)

Utilizator glbglGeorgiana bgl glbgl Data 13 iulie 2015 14:01:34
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 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, 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-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(){
 
    read();
    MergeSort(1, N);
    write();
}