Cod sursa(job #1362340)

Utilizator theory1TeodorCotet theory1 Data 26 februarie 2015 11:56:47
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.34 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 500001

int new_v[NMAX];

void merge_sort(int v[], int st, int dr) {

    if(st >= dr) return;

    int mid = (st + dr) / 2;

    merge_sort(v, st, mid);
    merge_sort(v, mid + 1, dr);

    int i; int k; int j;

    for(i = k = st, j = mid + 1; k <= dr ; ) {
        if( (v[i] <= v[j] && i <= mid) || j > dr )
            new_v[k++] = v[i++];
        else if( (v[i] >= v[j] && j <= dr) || i > mid )
            new_v[k++] = v[j++];
    }
    for(i = st; i <= dr; ++i)
        v[i] = new_v[i];

    //int *new_v = malloc(sizeof(int) * (dr - st + 2));
/*
    int ind = 0; int a = st; int b = mid + 1;

    while(a != mid + 1 || b != dr + 1) {

        if(b == dr + 1) { new_v[++ind] = v[a]; ++a; continue; }

        if(a == mid + 1) { new_v[++ind] = v[b]; ++b; continue; }

        if(v[a] > v[b] ) {
            new_v[++ind] = v[b];
            ++b;
        } else {
            new_v[++ind] = v[a];
            ++a;
        }
    }
    */
}

int main() {


    FILE *in = freopen("algsort.in", "r", stdin);
    FILE *out = freopen("algsort.out", "w", stdout);

    int N; int v[NMAX];

    scanf("%d", &N);

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

    for(int i = 1; i <= N; ++i)
        printf("%d ", v[i]);
    printf("\n");
    fclose(in); fclose(out);
    return 0;
}