Cod sursa(job #1778214)

Utilizator crazylamaRiclea Andrei crazylama Data 13 octombrie 2016 16:58:07
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

FILE *f=fopen("algsort.in","r");
FILE *g=fopen("algsort.out","w");

int* Interclaseaza(int *v1, int n, int *v2, int m) {
    int i1 = 0, i2 = 0, k = 0;
    int *c = (int*)calloc(n + m + 1, sizeof(int));
    while (i1 < n && i2 < m) {
        if(v1[i1] >= v2[i2]) {
            c[k++] = v2[i2];
            i2++;
        } else {
            c[k++] = v1[i1];
            i1++;
        }
    }
    while (i1 < n) {
        c[k++] = v1[i1];
        i1++;
    }
    while (i2 < m) {
        c[k++] = v2[i2];
        i2++;
    }
    return c;
}

int* MergeSort(int* v, int n) {
    int m = n / 2, *v1, *v2;
    if(n > 1) {
        v1 = MergeSort(v, m);
        v2 = MergeSort(v + m, n - m);
        int* rez = Interclaseaza(v1, m, v2, n - m);
        return rez;
    } else {
        return v;
    }
}

int main()
{
    int n, *v;
    fscanf(f, "%d", &n);
    v = (int*)calloc(n + 1, sizeof(int));
    for (int i = 0; i < n; i++)
        fscanf(f, "%d", &v[i]);
    int *rez = MergeSort(v, n);
    for (int i = 0; i < n; i++)
        fprintf(g, "%d ", rez[i]);
    return 0;
}