Cod sursa(job #1247827)

Utilizator sherban26FMI Mateescu Serban-Corneliu sherban26 Data 24 octombrie 2014 00:21:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
//Mateescu Serban-Corneliu FMI 135
//mergesort
#include <stdio.h>
#include <stdlib.h>

using namespace std;

FILE *fin;
FILE *fout;

int c[500005], v[500005];

void merg(int l, int mid, int r)
{
    int i, j, k, x;
    i = l;
    j = mid + 1;
    x = l;

    while(i <= mid && j <= r)
    {
        if(v[i] < v[j])
        {
            c[x] = v[i];
            ++i;
        }
        else
        {
            c[x] = v[j];
            ++j;
        }
        ++x;
    }

    while(i <= mid)
    {
        c[x] = v[i];
        ++i;
        ++x;
    }

    while(j <= r)
    {
        c[x] = v[j];
        ++j;
        ++x;
    }

    for(k = l; k <= r; k++)
        v[k] = c[k];
}

void mergesort(int l, int r)
{
    if (l < r)
    {
        int mid = (l + r) / 2;
        mergesort(l, mid);
        mergesort(mid + 1, r);
        merg(l, mid, r);
    }
}

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

    int n, i;

    fscanf(fin, "%d", &n);

    for(i = 0; i < n; i++)
        fscanf(fin, "%d", &v[i]);

    mergesort(0, n - 1);

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

    fclose(fin);
    fclose(fout);
    return 0;
}