Cod sursa(job #1785772)

Utilizator crazylamaRiclea Andrei crazylama Data 21 octombrie 2016 22:27:16
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <cstdlib>
using namespace std;

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

int n, *v, *rez;

void InterClasare(int st1, int dr1, int st2, int dr2)
{
    int i1 = st1, i2 = st2, k = 0;
    rez = (int*)calloc(dr2 - st1 + 1, sizeof(int));
    while (i1 <= dr1 && i2 <= dr2)
        if (v[i1] <= v[i2])
            rez[k++] = v[i1++];
        else
            rez[k++] = v[i2++];
    while (i1 <= dr1)
        rez[k++] = v[i1++];
    while (i2 <= dr2)
        rez[k++] = v[i2++];
    for (int i = st1, j = 0; j < k; ++i, ++j)
        v[i] = rez[j];
}

void MergeSort(int st, int dr)
{
    if (dr - st >= 1)
    {
        int mij = st + (dr - st) / 2;
        MergeSort(st, mij);
        MergeSort(mij + 1, dr);
        InterClasare(st, mij, mij + 1, dr);
    }
}

int main()
{
    f >> n;
    v = (int*)calloc(n, sizeof(int));
    for (int i = 0; i < n; ++i)
        f >> v[i];
    MergeSort(0, n - 1);
    for (int i = 0; i < n; ++i)
        g << v[i] << " ";
    return 0;
}