Cod sursa(job #1239398)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 8 octombrie 2014 23:46:52
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>

#define Nmax 500005

int v[Nmax], n;
int aux[Nmax];

void read(){
    int i;
    scanf("%d", &n);
    for (i = 1; i <= n; ++i)
        scanf("%d", &v[i]);
    fclose(stdin);
}

void swap(int *a, int *b){
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}

void merge_sort(int l, int r){
    if (r == l)
        return;
    else if (r - l == 1){
        if (v[l] > v[r])
            swap(&v[l], &v[r]);
        return;
    } else{
        int m = (l + r) / 2;
        merge_sort(l, m);
        merge_sort(m + 1, r);

        int i = l;
        int j = m + 1;
        int k = l;

        for (; i <= m || j <= r;)
            if (i > m || (j <= r && v[i] > v[j]))
                aux[k++] = v[j++];
            else
                aux[k++] = v[i++];
        for (k = l; k <= r; ++k)
            v[k] = aux[k];
    }
}

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

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

    read();
    merge_sort(1, n);
    print();

    fclose(stdout);
    return 0;
}