Cod sursa(job #1512667)

Utilizator theprdvtheprdv theprdv Data 28 octombrie 2015 14:36:24
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.85 kb
/* MergeSort */

#include <stdio.h>
#include <assert.h>
#include <string.h>

#define MAXN 500002

int N, A[MAXN], B[MAXN];

void MergeSort(int A[], int B[], int l, int r){
    if (r == l)
    {
        B[l] = A[l];
        return;
    }

    int mid = (l + r) / 2;
    MergeSort(A, B, l, mid);
    MergeSort(A, B, mid + 1, r);

    int i = l, j = mid + 1, k;
    for (k = l; k <= r; ++k)
        if ( j > r || ( i <= mid && B[i] < B[j]) )
            A[k] = B[i++];
        else A[k] = B[j++];

    for (i = l; i <= r; ++i) B[i] = A[i];
}

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

    scanf("%d", &N);

    int i;
    for (i = 0; i < N; ++i) scanf("%d", &A[i]);

    MergeSort(A, B, 0, N - 1);

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

    return 0;
}