Cod sursa(job #1533895)

Utilizator Ionut228Ionut Calofir Ionut228 Data 23 noiembrie 2015 03:46:28
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

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

int N;
int V[500005], aux[500005];

void interc (int V[], int lt, int rt)
{
    int mid = (lt + rt) / 2;
    int k = lt - 1, i = lt, j = mid + 1;

    while (i <= mid && j <= rt)
    {
        if (V[i] < V[j])
        {
            ++k;
            aux[k] = V[i];
            ++i;
        }
        else
        {
            ++k;
            aux[k] = V[j];
            ++j;
        }
    }

    while (i <= mid)
    {
        ++k;
        aux[k] = V[i];
        ++i;
    }
    while (j <= rt)
    {
        ++k;
        aux[k] = V[j];
        ++j;
    }
    for (i = lt; i <= rt; ++i)
        V[i] = aux[i];
}

void mergeSort(int V[], int lt, int rt)
{
    if (lt == rt)
        return;

    int mid = (lt + rt) / 2;

    mergeSort(V, lt, mid);
    mergeSort(V, mid + 1, rt);
    interc(V, lt, rt);
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> V[i];
    mergeSort(V, 1, N);

    for (int i = 1; i <= N; ++i)
        fout << V[i] << ' ';

    fin.close();
    fout.close();
    return 0;
}