Cod sursa(job #2254173)

Utilizator valentinoMoldovan Rares valentino Data 4 octombrie 2018 20:46:00
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <limits.h>
#include <float.h>

#define maxN 500000

int aux[maxN];

void mergeSort(int *v, int left, int right)
{

    int m = (left + right) >> 1, i, j, k;
    if(left == right)
        return ;

    mergeSort(v, left, m);
    mergeSort(v, m + 1, right);

    for(i = left, j = m + 1, k = left; i <= m || j <= right; )
    {
        if(j > right || (v[i] < v[j] && i <= m))
        {
            aux[k++] = v[i++];
        }
        else
        {
            aux[k++] = v[j++];
        }
    }

    for(k = left; k <= right; ++k)
        v[k] = aux[k];

}

int main()
{
    FILE *f_in, *f_out;

    f_in = fopen("algsort.in", "r");
    f_out = fopen("algsort.out", "w");

    int n, v[maxN];

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

    mergeSort(v, 0, n - 1);
    for(int i = 0; i < n; ++i)
    {
        fprintf(f_out, "%d ", v[i]);
    }

}