Cod sursa(job #1604359)

Utilizator andreinmAndrei andreinm Data 18 februarie 2016 10:26:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <cstdio>
using namespace std;

const int Nmax = 500000 + 5;

int a[Nmax], n;

void Ic(int left, int mid, int right);

void Sort(int left, int right)
{
    int mid;
    if (left != right){
        mid = (left + right) / 2;
        Sort(left, mid);
        Sort(mid + 1, right);
        Ic(left, mid, right);
    }
}

void Ic(int left, int mid, int right)
{
    int b[Nmax], i, j, k, tmp;
    for (i = left; i <= right; ++i)
        b[i] = a[i];
    i = left; j = mid + 1; k = i - 1;
    while (i <= mid && j <= right)
    (b[i] < b[j])? a[++k] = b[i++] : a[++k] = b[j++];

    for (tmp = i; tmp <= mid; ++tmp)
        a[++k] = b[tmp];
    for (tmp = j; tmp <= right; ++tmp)
        a[++k] = b[tmp];
}

int main()
{
    freopen ("algsort.in", "r", stdin);
    freopen ("algsort.out", "w", stdout);

    scanf ("%d", &n);
    for (int i = 1; i <= n; ++i)
        scanf ("%d", &a[i]);
    Sort (1, n);
    for (int i = 1; i <= n; ++i)
        printf ("%d ", a[i]);

    return 0;
}