Cod sursa(job #2927136)

Utilizator LXGALXGA a LXGA Data 19 octombrie 2022 17:14:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n,v[500001];
void swapp(int l,int r)
{
    int mid=(l+r)/2;
    vector<int> a,b;
    for(int i=mid;i>=l;i--)
        a.push_back(v[i]);
    for(int i=r;i>=mid+1;i--)
        b.push_back(v[i]);
    for(int i=l;i<=r;i++)
    {
        if(b.empty())
        {
            v[i]=a.back();
            a.pop_back();
        }
        else if(a.empty())
        {
v[i]=b.back();
            b.pop_back();
        }
        else if(!a.empty() && a.back()<b.back())
        {
            v[i]=a.back();
            a.pop_back();
        }
        else if(!b.empty())
        {
            v[i]=b.back();
            b.pop_back();
        }
    }
}
void msort(int l,int r)
{
    if(l>=r)
        return;
    int mid=(l+r)/2;
    msort(l,mid);
    msort(mid+1,r);
    if(v[mid]>v[mid+1])
        swapp(l,r);
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i];
    msort(1,n);
    for(int i=1;i<=n;i++)
        cout<<v[i]<<' ';
    return 0;
}