Cod sursa(job #1871364)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 7 februarie 2017 12:03:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <cstdio>
#define Nmax 500001
using namespace std;

ofstream g("algsort.out");
int v[Nmax],n,aux[Nmax];

void _sort(int st,int dr)
{
    int mid = (st+dr)/2;
    if (dr==st+1)
    {
        int aux = max(v[dr],v[st]);
        v[st] = min(v[dr],v[st]);
        v[dr] = aux;
        return;
    }
    else if (dr==st)
        return;
    _sort(st,mid);
    _sort(mid+1,dr);

    int lg=0,a = st,b = mid+1;
    while (a<=mid || b<=dr)
    {
        if (a<=mid && (b==dr+1 || v[a]<v[b]))
        {
            aux[++lg] = v[a];
            a++;
        }
        else
        {
            aux[++lg] = v[b];
            b++;
        }
    }
    for (int i=st;i<=dr;i++)
        v[i] = aux[i-st+1];
}

int main()
{
    freopen("algsort.in","r",stdin);

    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }

    _sort(1,n);

    for (int i=1;i<=n;i++)
        g<<v[i]<<' ';
    return 0;
}