Cod sursa(job #3124639)

Utilizator David8406Marian David David8406 Data 29 aprilie 2023 17:18:47
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define mod 666013
using namespace std;
int n,v[500005],s[500005],d[500005],ns,nd;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
std::random_device rd;
std::mt19937 gen(rd());
int random(int low, int high)
{
    std::uniform_int_distribution<> dist(low, high);
    return dist(gen);
}
void quicksort(int st, int dr){
    if (st>=dr) return;
    ns=0;
    nd=0;
    int rnd=random(st,dr);
    int pivot=v[rnd];
    for (int i=st;i<=dr;i++){
        if (i==rnd) continue;
        if (v[i]<pivot){
            ns++;
            s[ns]=v[i];
        }
        else{
            nd++;
            d[nd]=v[i];
        }
    }
    for (int i=1;i<=ns;i++) v[st+i-1]=s[i];
    v[st+ns]=pivot;
    for (int i=1;i<=nd;i++) v[st+ns+i]=d[i];
    quicksort(st,st+ns-1);
    quicksort(st+ns+1,dr);
}
int main(){
    fin>>n;
    for (int i=1;i<=n;i++) fin>>v[i];
    quicksort(1,n);
    for (int i=1;i<=n;i++) fout<<v[i]<<" ";
}