Cod sursa(job #2238419)

Utilizator danielsociuSociu Daniel danielsociu Data 5 septembrie 2018 16:54:08
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <fstream>
std::ifstream cin("algsort.in");
std::ofstream cout("algsort.out");
#define maxn 500050
int v[maxn],N;

void afis(int v[],int n){
    for(int i=1;i<=n;i++)
        cout<<v[i]<<' ';
}
void citire(int v[],int &n){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i];
}

void quicksort(int v[],int st, int dr){
    if(st<dr){
        int i=st, aux;
        int rad=v[dr];
        for(int j=st;j<dr;j++)
            if(v[j]<rad){
                std::swap(v[i],v[j]);
                i+=1;
            }
        v[dr]=v[i];
        v[i]=rad;
        quicksort(v,st,i-1);
        quicksort(v,i+1,dr);
    }
}
void quicksort_medianOfThree(int v[],int st, int dr){
    if(st<dr){
        int med=(st+dr)/2;
        if(v[st]>v[med])
            std::swap(v[st],v[med]);
        if(v[st]>v[dr])
            std::swap(v[dr],v[st]);
        if(v[med]>v[dr])
            std::swap(v[dr],v[med]);
        int rad=v[med], i=st+1;
        std::swap(v[med],v[dr-1]);
        for(int j=st+1;j<dr-1;j++)
            if(v[j]<rad){
                std::swap(v[i],v[j]);
                i+=1;
            }
        std::swap(v[i],v[dr-1]);
        quicksort(v,st,i-1);
        quicksort(v,i+1,dr);
    }
}
void updatedquicksort(int v[],int st, int dr){
    if(st<dr){
        int i=st,j=dr-1,rad=v[dr],aux;
        for(;;){
            while(v[i]<rad) i++;
            while(v[j]>rad) j--;
            if(i<j){
                aux=v[i];
                v[i]=v[j];
                v[j]=aux;
            }
            else
                break;
        }

        quicksort(v,st,i-1);
        quicksort(v,i+1,dr);
    }
}

int main()
{
    citire(v,N);
    updatedquicksort(v,1,N);
    afis(v,N);
}