Cod sursa(job #1525105)

Utilizator edim98Eduard Constantinescu edim98 Data 14 noiembrie 2015 19:06:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#define nmax 500001
FILE *fin = fopen("algsort.in", "r");
FILE *fout = fopen("algsort.out", "w");

using namespace std;

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

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

void interclasare(int st, int m, int dr)
{

    int x = st, y = m+1, k = 1;

    while(x <= m && y <= dr)
    {
        if(v[x] <= v[y])
            aux[k++] = v[x++];
        else
            aux[k++] = v[y++];
    }
    while(x <= m)
        aux[k++] = v[x++];
    while(y <= dr)
        aux[k++] = v[y++];

    int t = st;

    for(k = 1; k <= dr-st+1; k++)
        v[t++] = aux[k];
}

void mergesort(int st, int dr)
{
    if(st < dr)
    {
        int m = (st+dr)/2;

        mergesort(st, m);
        mergesort(m+1, dr);
        interclasare(st, m, dr);
    }
}


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

int main()
{
    citire();
    mergesort(1, n);
    afisare();
    return 0;
}