Cod sursa(job #2154174)

Utilizator IustinPetrariuIustinian Petrariu IustinPetrariu Data 6 martie 2018 19:06:16
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#define nmax 500001

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

int n,a[nmax];
void read()
{
    fin>>n;
    for(int i =0 ; i < n ; i++)
        fin>>a[i];

}
void foundSolution(int p, int m, int q)
{
    int i=p,j=m+1,k=0;
    int b[101];
    while(i<=m && j <=q)
    {
        if(a[i]<a[j]) b[k++]=a[i++];
        else b[k++]=a[j++];

    }
    while(i<=m) b[k++]=a[i++];
    while(j<=q) b[k++]=a[j++];
    for(int i = p ; i <= q; i ++)
        a[i]=b[i-p];

}
void mergeSort(int p, int q)
{
    if(q>p)
    {
        int m=(p+q)/2;
        mergeSort(p,m);
        mergeSort(m+1,q);
        foundSolution(p,m,q);
    }
}
void write()
{
    for(int i = 0 ; i < n ; i++)
        fout<<a[i]<<" ";
}
int main()
{
    read();
    mergeSort(0,n-1);
    write();

    return 0;
}