Cod sursa(job #1765986)

Utilizator alexandru.ghergutAlexandru-Gabriel Ghergut alexandru.ghergut Data 27 septembrie 2016 10:46:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;

void process(int left, int middle, int right, int arr[])
{
    int length = right - left + 1;
    int aux[length], k = 0, i = left, j = middle + 1;

    while (i <= middle && j <= right)
    {
        if (arr[i] <= arr[j])
            aux[k] = arr[i++];
        else
            aux[k] = arr[j++];
        k++;
    }

    while (i <= middle)
        aux[k++] = arr[i++];
    while (j <= right)
        aux[k++] = arr[j++];

    k = 0;
    for (i = left; i <= right; i++)
        arr[i] = aux[k++];
}

void mergeSort(int left, int right, int arr[])
{
    if (left < right)
    {
        int middle = left + (right - left) / 2;
        mergeSort(left, middle, arr);
        mergeSort(middle + 1, right, arr);
        process(left, middle, right, arr);
    }
}


int main()
{
    int N;
    ifstream f("algsort.in");
    f >> N;
    int arr[N];
    for (int i = 0; i < N; i++)
        f >> arr[i];
    f.close();
    mergeSort(0, N - 1, arr);
    ofstream g("algsort.out");
    for (int i = 0; i < N; i++)
        g << arr[i] << ' ';
    g.close();
    return 0;
}