Cod sursa(job #1893986)

Utilizator raulmuresanRaul Muresan raulmuresan Data 26 februarie 2017 12:28:45
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
//MergeSort
#include<fstream>
#include<vector>
#include<string>
#define modulo 666013

using namespace std;

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


string sir;
int i, n, k, j,contor,st,dr,sol,x,y;
int a[500005];

void merge(int a[], int stanga, int mij, int dreapta)
{
    int b[500005];
    int x , y , k;
    k = stanga;
    x = stanga;
    y = mij + 1;
    while(x <= mij && y <= dreapta)
    {
        if(a[x] < a[y])
        {
            b[k++] = a[x];
            x++;
        }
        else if(a[y] < a[x])
        {
            b[k++] = a[y];
            y++;
        }
        else
        {
            b[k++] = a[x];
            b[k++] = a[y];
            x++;
            y++;
        }
    }
    while(x <= mij)
    {
        b[k++] = a[x];
        x++;
    }
    while(y <= dreapta)
    {
        b[k++] = a[y];
        y++;
    }
    for(i = stanga; i <= dreapta; i++)
    {
        a[i] = b[i];
    }


}

void mergeSort(int a[], int stanga, int dreapta)
{
    if(stanga < dreapta)
    {
        int mij = (stanga + dreapta) / 2;
        mergeSort(a, stanga, mij);
        mergeSort(a, mij + 1, dreapta);
        merge(a, stanga, mij, dreapta);
        //fout << stanga << " " << dreapta << "\n";
    }

}

int main()
{
    fin >> n;
    for(i = 1; i <= n; i++)
    {
        fin >> a[i];
    }
    mergeSort(a, 1, n);
    for(i = 1; i <= n; i++)
    {
        fout << a[i] << " ";
    }

}