Cod sursa(job #2999186)

Utilizator mh_7Horvath Matei mh_7 Data 10 martie 2023 16:31:14
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef const unsigned int cint;

template <class T=int>
bool default_cmp(T x, T y)
{
    return (x<y);
}

template <class T=int>
void Merge(T v[], cint st, cint mj, cint dr, bool cmp(T, T)=default_cmp)
{
    unsigned int i=st, j=mj+1, k=0;
    T *tmp=new T[dr-st+1];
    while(i<=mj && j<=dr)
    {
        if(cmp(v[i], v[j])) tmp[k ++]=v[i ++];
        else tmp[k ++]=v[j ++];
    }
    while(i<=mj) tmp[k ++]=v[i ++];
    while(j<=dr) tmp[k ++]=v[j ++];
    for(i=st, j=0; i<=dr; ++i, ++j)
    {
        v[i]=tmp[j];
    }
    delete[] tmp;
}

template <class T=int>
void MergeSort(T v[], cint st, cint dr, bool cmp(T, T)=default_cmp)
{
    if(st>=dr) return ;
    cint mj=st+(dr-st)/2;
    MergeSort(v, st, mj, cmp);
    MergeSort(v, mj+1, dr, cmp);
    Merge(v, st, mj, dr);
}

int v[500001], n;
int main()
{
    fin>>n;
    int i;
    for(i=0; i<n; ++i)
    {
        fin>>v[i];
    }
    MergeSort(v, 0, n-1);
    for(i=0; i<n; ++i)
    {
        fout<<v[i]<<' ';
    }
    return 0;
}