Cod sursa(job #2080937)

Utilizator RaduIonescuRadu Ionescu RaduIonescu Data 3 decembrie 2017 17:59:05
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");

const int N=500001;

int n,i,v[N],w[N],u[N];

int pivotare(int st , int dr )
{
    int pivot,p=1,Q=1;
    pivot=v[st];

    for (int j=st+1;j<=dr;++j)
        if (v[j]<pivot) w[p++]=v[j];
        else u[Q++]=v[j];

    int poz = st;
    for (i=1;i<=p-1;++i) v[poz++]=w[i];
    int pozPivot = poz;
    v[poz++] = pivot;
    for (i=1; i<=Q-1; ++i) v[poz++] = u[i];

    return pozPivot;
}

void quicksort(int st, int dr)
{
    if(st >= dr)
        return;

    int pivPoz = pivotare(st, dr);
    quicksort(st, pivPoz - 1);
    quicksort(pivPoz+1, dr);
}

int main()
{
    in>>n;
    for (i=1;i<=n;++i) in>>v[i];
    //for (i=1;i<=n;++i) cout<<v[i]<<" "; cout<<"\n";
    quicksort(1, n);
    for (i=1;i<=n;++i) out<<v[i]<<" ";
    return 0;
}