Cod sursa(job #1511593)

Utilizator Ionut228Ionut Calofir Ionut228 Data 26 octombrie 2015 22:12:12
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

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()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int i;

    scanf("%d", &N);
    for (i = 1; i <= N; ++i)
        scanf("%d", &V[i]);
    mergeSort(V, 1, N);

    for (i = 1; i <= N; ++i)
        printf("%d ", V[i]);

    return 0;
}