Cod sursa(job #1718670)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 18 iunie 2016 18:21:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 500005;

int v[NMAX], aux[NMAX];

void merge(int xa, int ya, int xb, int yb) {
    for(int i=0; xa<=ya || xb<=yb; ++i)
        if(xa<=ya && (v[xa]<=v[xb] || xb>yb))
            aux[i]=v[xa++];
        else
            aux[i]=v[xb++];
}

void my_sort(int st, int dr) {
    if(st>=dr)
        return;

    int m = (st + dr) / 2;

    my_sort(st,   m);
    my_sort(m+1, dr);
    merge(st, m, m+1, dr);

    for(int i=0; i<=dr-st; ++i)
        v[st+i] = aux[i];
}

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

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

    my_sort(1, n);

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

    fclose(stdin);
    fclose(stdout);
    return 0;
}