Cod sursa(job #1785510)

Utilizator BLz0rDospra Cristian BLz0r Data 21 octombrie 2016 14:23:40
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
/* Sortare folosita: MergeSort */
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

// stiu ca exista merge in STL...
vector<int> Merge(vector<int> A, vector<int> B) {

    int N = A.size();
    int M = B.size();

    vector<int> Aux;

    int x = 0, y = 0;

    while (x < N && y < M) {
        if (A[x] < B[y]) {
            Aux.push_back(A[x]);
            x++;
        }
        else{
            Aux.push_back(B[y]);
            y++;
        }
    }

    while (x < N) {
        Aux.push_back(A[x]);
        x++;
    }

    while (y < M) {
        Aux.push_back(B[y]);
        y++;
    }

    return Aux;
}

vector<int> MergeSort(vector<int> V) {

    if (V.size() == 1)
        return V;

    int mid = (V.size() + 1) >> 1;

    vector<int> A(mid), B(V.size() - mid);

    copy(V.begin(), V.begin() + mid, A.begin());
    copy(V.begin() + mid, V.end(), B.begin());

    return Merge(MergeSort(A), MergeSort(B));
}

int main() {

    int N;

    vector<int> V, Sol;

    fin >> N;
    V.resize(N);

    for (int i = 0; i < N; ++i)
        fin >> V[i];

    Sol = MergeSort(V);

    for (int i = 0; i < N; ++i)
        fout << Sol[i] << " ";

    return 0;
}