Cod sursa(job #2025642)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 22 septembrie 2017 23:23:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMAX 500001

using namespace std;

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

int p[NMAX], n;
int aux[NMAX], nr = 0;

void Merge(int x1, int y1, int x2, int y2) {

    int i = x1, j = x2;
    nr = 0;

    while (i <= y1 && j <= y2) {

        if (p[i] < p[j])
            aux[++nr] = p[i++];
        else
            if (p[i] > p[j])
                aux[++nr] = p[j++];
        else {

            aux[++nr] = p[i++];
            aux[++nr] = p[j++];
        }
    }

    while (i <= y1)
        aux[++nr] = p[i++];
    while (j <= y2)
        aux[++nr] = p[j++];
}

void MergeSort(int x, int y) {

    if (x != y) {

        int m = x + (y - x) / 2;
        MergeSort(x, m);
        MergeSort(m + 1, y);
        Merge(x, m, m + 1, y);

        for (int i = x; i <= y; i++)
            p[i] = aux[i - x + 1];
    }
}

int main() {

    in >> n;
    for (int i = 1; i <= n; i++)
        in >> p[i];

    MergeSort(1, n);

    for (int i = 1; i <= n; i++)
        out << p[i] << " ";

    in.close();
    out.close();
    return 0;
}