Cod sursa(job #2034111)

Utilizator GinguIonutGinguIonut GinguIonut Data 7 octombrie 2017 14:18:49
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <stdlib.h>

#define nMax 500001

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

void merge_sort(int st, int dr)
{
    if(st == dr) {
        return;
    }

    int ii, jj, mid = st + (dr-st)/2, poz = st;
    merge_sort(st, mid);
    merge_sort(mid+1, dr);

    for(ii = st, jj = mid+1; ii<=mid && jj<=dr; ){
        if(v[ii] > v[jj]) {
            aux[poz++] = v[jj++];
        } else {
            aux[poz++] = v[ii++];
        }
    }

    for(; ii<=mid; ) {
        aux[poz++] = v[ii++];
    }

    for(; jj<=dr; ) {
        aux[poz++] = v[jj++];
    }

    for(ii = st; ii<=dr; ii++) {
        v[ii] = aux[ii];
    }

}

int main()
{
    FILE *in, *out;
    in = fopen("algsort.in", "r");
    out = fopen("algsort.out", "w");

    int i;

    fscanf(in, "%d", &n);
    for(i=1; i<=n; i++) {
        fscanf(in, "%d", &v[i]);
    }

    merge_sort(1, n);

    for(i=1; i<=n; i++) {
        fprintf(out, "%d ", v[i]);
    }

    return 0;
}