Cod sursa(job #1785521)

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

#define Nmax 500002

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

int v[Nmax], Aux[Nmax];

void Merge(int st1, int dr1, int st2, int dr2) {

    int p = 0, x = st1, y = st2;

    while (x <= dr1 && y <= dr2) {
        if (v[x] < v[y]) {
            Aux[++p] = v[x];
            x++;
        }
        else {
            Aux[++p] = v[y];
            y++;
        }
    }

    while (x <= dr1) {
        Aux[++p] = v[x];
        x++;
    }

    while (y <= dr2) {
        Aux[++p] = v[y];
        y++;
    }

    for (int i = st1, j = 1; i <= dr2; ++i, ++j)
        v[i] = Aux[j];
}

void MergeSort(int st, int dr) {

    if (st >= dr)
        return;

    int mid = (st + dr) >> 1;

    MergeSort(st, mid);
    MergeSort(mid + 1, dr);
    Merge(st, mid, mid + 1, dr);
};

int main() {

    int N;

    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> v[i];

    MergeSort(1, N);

    for (int i = 1; i <= N; ++i)
        fout << v[i] << " ";

    return 0;
}