Cod sursa(job #3259325)

Utilizator akumariaPatrascanu Andra-Maria akumaria Data 25 noiembrie 2024 20:24:52
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>

#define NMAX 500001

int a[NMAX], aux[NMAX];

void mergesort(int right, int left) {
    if (right >= left)
        return;

    int mid = (right + left) / 2;

    mergesort(right, mid);
    mergesort(mid + 1, left);

    int i = right, j = mid + 1, current = right - 1;

    for(; i<=mid || j<=left; ) {
        ++current;

        if (i > mid) {
            aux[current] = a[j];
            ++j;
            continue;
        }

        if(j > left) {
            aux[current] = a[i];
            ++i;
            continue;
        }

        if (a[i] < a[j]) {
            aux[current] = a[i];
            ++i;
        } else {
            aux[current] = a[j];
            ++j;
        }

    }

    for(i = right; i <= left; ++i)
        a[i] = aux[i];

}

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

    int n;
    scanf("%d", &n);

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

    
    mergesort(1, n);

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