Cod sursa(job #3000753)

Utilizator RaducusCaracas Radu Nicolae Raducus Data 12 martie 2023 20:12:19
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("algsort.in");
ofstream out("aglsort.out");
int v[500001];
int dr[500001];
int st[500001];
int mij[500001];
int n;
int pivot;
void quicksort(int spos=0,int dpos=n-1){
        // cout<<spos<<" "<<dpos<<endl;
        int m=0;
        int s=0;
        int d=0;
        int p=v[spos];
        // cout<<"p="<<p<<endl;
        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++];
            // cout<<v[i]<<" ";
        }
        // cout<<"stanga"<<endl;
        k=0;
         for (int i = spos+s; i <spos+ s+m; i++)
        {
            v[i]=mij[k++];
            // cout<<v[i]<<" ";
        }
        
        // cout<<"mijloc"<<endl;
        k=0;
        for (int i = spos+s+m; i <spos+ s+d+m; i++)
        {
            v[i]=dr[k++];
            // cout<<v[i]<<" ";
        }
        // cout<<"dreapta"<<endl;
        // cout<<"s="<<s<<endl;
        // cout<<"m="<<m<<endl;

        // cout<<"d="<<d<<endl;
        if(s!=0)
        quicksort(0,s);
        if(s+m!=s+m+d)
        quicksort(s+m,s+d+m-1);

    // cout<<endl;
}
int main(){
    in>>n;
    //citire
    for (int i = 0; i < n; i++)
    {
        in>>v[i];
    }
    
    
    //afisare
    quicksort(0,n-1);
                  for (int i = 0; i < n; i++)
    {
        out<<v[i]<<" ";
    }
    // quicksort(4,5);

}