Cod sursa(job #1786073)

Utilizator andreiugravuFMI Andrei Zugravu andreiugravu Data 22 octombrie 2016 12:42:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
//MergeSort

#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

#define DMAX 500000

unsigned N;
unsigned v[DMAX+5], i;
unsigned aux[DMAX+5], j;
unsigned k, l;

void Interclasare(unsigned p, unsigned m, unsigned q) {
    i = p;
    j = m+1;
    k = 1;

    while(i <= m && j <= q) {
        if(v[i] < v[j])
            aux[k++] = v[i++];
        else
            aux[k++] = v[j++];
    }

    while(i <= m) aux[k++] = v[i++];
    while(j <= q) aux[k++] = v[j++];

    l = p;
    for(k = 1 ; k <= (q-p)+1 ; k++)
        v[l++] = aux[k];
}

void MergeSort(unsigned p, unsigned q) {

    if(p < q) {
        unsigned m = (p+q)/2;
        MergeSort(p, m);
        MergeSort(m+1, q);
        Interclasare(p, m, q);
    }
}

int main()
{
    fin>>N;
    for(i = 1 ; i <= N ; i++)
        fin>>v[i];

    MergeSort(1, N);

    for(i = 1 ; i <= N ; i++)
        fout<<v[i]<<' ';

    fin.close();
    fout.close();

    return 0;
}