Cod sursa(job #1226522)

Utilizator vevuiocsaIocsa Valeriu Ionut vevuiocsa Data 5 septembrie 2014 22:36:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;

void Merge(int *a, int na, int *b, int nb, int *c)
{
    int i = 0, j = 0, k = 0;
    while (i < na && j < nb)
    {
        if (a[i] <= b[j])
        {
            c[k] = a[i];
            i++;
            k++;
        }
        else
        {
            c[k] = b[j];
            j++;
            k++;
        }
    }
    while (i < na)
    {
        c[k] = a[i];
        i++;
        k++;
    }
    while (j < nb)
    {
        c[k] = b[j];
        j++;
        k++;
    }
}

void MergeSort(int *v, int n) {
    if (n <= 1)
        return;
    int *left_v = new int[n / 2];
    int *right_v = new int[n - n / 2];
    for (int i = 0; i < n / 2; i++)
        left_v[i] = v[i];
    for (int i = 0; i < n - n / 2; i++)
        right_v[i] = v[i + n / 2];
    MergeSort(left_v, n / 2);
    MergeSort(right_v, n - n / 2);
    Merge(left_v, n / 2, right_v, n - n / 2, v);
    delete[] left_v;
    delete[] right_v;
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");
    int n;
    fin >> n;
    int *v = new int[n];
    for (int i = 0; i < n; i++)
        fin >> v[i];
    MergeSort(v, n);
    for (int i = 0; i < n; i++)
        fout << v[i] << " ";
    fout << "\n";
    fin.close();
    fout.close();
    return 0;
}