Cod sursa(job #1424028)

Utilizator abel1090Abel Putovits abel1090 Data 23 aprilie 2015 11:19:41
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
////MERGESORT
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>

using namespace std;

const int INF = numeric_limits<int>::max();

void mMerge(vector<int>& A, int p, int q, int r) {
    int n1 = q-p+1;
    int n2 = r-q;

    vector<int> L(n1+1);
    vector<int> R(n2+1);

    for(int i=0; i<n1; ++i)
        L[i] = A[p+i];
    for(int i= 0; i<n2; ++i)
        R[i] = A[q+i+1];

    L[n1] = R[n2] = INF;
    int i = 0, j = 0;
    for(int k = p; k<=r; ++k)
        if(L[i] <= R[j]) {
            A[k] = L[i];
            ++i;
        } else {
            A[k] = R[j];
            ++j;
        }
}

void mergeSort(vector<int>& A, int p, int r) {
    if(p<r) {
        int q = (p+r)/2;
        mergeSort(A, p, q);
        mergeSort(A, q+1, r);
        mMerge(A, p, q, r);
    }
}

int main() {
    ifstream inStr("algsort.in");
    ofstream outStr("algsort.out");

    int N;
    inStr >> N;

    vector<int> A(N);

    for(int i=0; i<N; ++i)
        inStr >> A[i];

    mergeSort(A, 0, N-1);

    for(auto i:A)
        outStr << i << ' ';
    outStr << '\n';

    return 0;
}