Cod sursa(job #3001887)

Utilizator AndreiV03Andrei Voicu AndreiV03 Data 14 martie 2023 00:38:41
Problema Sortare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

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

const int MAXN = 500001;

int v[MAXN];
int dr[MAXN];
int st[MAXN];
int mij[MAXN];
int n;

void quicksort(int spos = 0, int dpos = n - 1)
{
    if (spos >= dpos)
        return; 
    int m = 0, s = 0, d = 0;
    int p = v[spos];
    for (int i = spos; i <= dpos; i++)
    {
        if (v[i] > p)
            dr[d++] = v[i];
        if (v[i] < p)
            st[s++] = v[i];
        if (v[i] == p)
            mij[m++] = v[i];
    }
    int k = 0;
    for (int i = spos; i < spos + s; i++)
    {
        v[i] = st[k++];
    }
    k = 0;
    for (int i = spos + s; i < spos + s + m; i++)
    {
        v[i] = mij[k++];
    }
    k = 0;
    for (int i = spos + s + m; i < spos + s + d + m; i++)
    {
        v[i] = dr[k++];
    }
    quicksort(spos, spos + s - 1);
    quicksort(spos + s + m, dpos);
}

int main()
{
    in >> n;
    for (int i = 0; i < n; i++)
    {
        in >> v[i];
    }
    quicksort();
    for (int i = 0; i < n; i++)
    {
        out << v[i] << " ";
    }
}