Cod sursa(job #1934724)

Utilizator AndreiMaximIonutMaxim Andrei AndreiMaximIonut Data 21 martie 2017 19:10:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N;
int v[500001];

/*void MergeSort(int p, int m, int q)
{
    vector <int> b;
    int i,j;
    vector <int>::iterator it;
    i=p;
    j=m+1;


    while(i<=m && j<=q)
        if(v[i]<v[j])
            b.push_back(v[i++]);
        else
            b.push_back(v[j++]);

    while(i<=m) b.push_back(v[i++]);
    while(j<=q) b.push_back(v[j++]);


    for(i=p,it=b.begin(); i<=q; ++i,++it)
        v[i]=*it;

}*/
void MergeSort(int p, int m, int q)
{
    int i,j,k;
    int b[500001];
    i=p;
    j=m+1;
    k=0;

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

    while(i<=m) b[++k]=v[i++];
    while(j<=q) b[++k]=v[j++];
    k=0;
    for(i=p; i<=q; ++i)
        v[i]=b[++k];

}
void divide(int p, int q)
{
    if(q>p)
    {
        int m=(p+q)/2;
        divide(p,m);
        divide(m+1,q);
        MergeSort(p,m,q);
    }

}
int main()
{
    int i;
    fin>>N;
    for(i=1; i<=N; ++i) fin>>v[i];
    divide(1,N);
    for(i=1; i<=N; ++i)
        fout<<v[i]<<' ';
    return 0;
}