Cod sursa(job #3001905)

Utilizator RaducusCaracas Radu Nicolae Raducus Data 14 martie 2023 01:31:27
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

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 , int dpos )
{
    if (spos >= dpos)
        return; 
    int m = 0, s = 0, d = 0;
    
    srand(time(0));
    int index_p=rand()% (dpos-spos+1)+spos;
    int p = v[index_p];
    
    
    
    
    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(0,n-1);
    for (int i = 0; i < n; i++)
    {
        out << v[i] << " ";
    }
}