Cod sursa(job #1701615)

Utilizator Victor10Oltean Victor Victor10 Data 13 mai 2016 18:03:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <iostream>
#include <fstream>

#define DM 500005

using namespace std;

void merge_Arrays (int *v, int l, int m, int h)
{
    int *left;
    int *right;
    int i, j, k, nl, nr;
    nl = m - l + 1; // nl - nr of elements in left array
    nr = h - m; //nr - nr of elements in right array
    left = new int [nl + 1];
    right = new int [nr + 1];


    for (i = 0; i < nl; ++ i) //v [m] is taken
    {
        left [i] = v [l + i];
    }

    for (i = 0; i < nr; ++ i) //v [m] is not taken
    {
        right [i] = v [m + i + 1];
    }

    i = j = 0;
    k = l; // k - iterator for the original array
    while (i < nl && j < nr)
    {
        if (left [i] <= right [j])
        {
            v [k] = left [i ++];
        }
        else
        {
            v [k] = right [j ++];
        }
        k ++;
    }


    while (i < nl)
    {
        v [k ++] = left [i ++];
    }
    while (j < nr)
    {
        v [k ++] = right [j ++];
    }

    delete (left);
    delete (right);
}

void merge_Sort (int *v, int l, int r)
{
    if (l == r) return;

    int m = (l + r) / 2;

    merge_Sort (v, l, m);
    merge_Sort (v, m + 1, r);
    merge_Arrays (v, l, m, r);


}

void print_Array (int *v, int n, ofstream& out)
{
    int i;
    for (i = 0; i < n; ++ i)
        out << v [i] << ' ';
    out << '\n';
}

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

    int *v;
    int n, i, l, r;

    f >> n;
    v = new int [n];
    for (i = 0; i < n; ++ i)
    {
        f >> v [i];
    }

    l = 0;
    r = n - 1;

    merge_Sort(v, l, r);

    print_Array (v, n, g);

    return 0;
}