Cod sursa(job #2359893)

Utilizator kodama cheama alex koda Data 1 martie 2019 10:26:10
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

int v[500005];

void shuffle (int v[], int n) {
    srand(time(0));
    for ( int i = n; i > 0; i-- ) {
        int j = rand()%i;
        swap(v[i-1], v[j]);
    }
}

int partitie(int st, int dr, int v[] ) {
    int p = st;
    for ( int i = st; i < dr; i++ ) {
        if ( v[i] < v[dr] )
            swap(v[i], v[p++] );
    }
    swap (v[p], v[dr] );
    return p;
}

void qsort(int st, int dr, int v[] ) {
    if ( st >= dr )
        return;
    int p = partitie(st, dr, v);
    qsort(st,p-1,v);
    qsort(p+1,dr,v);
}

void partitie3( int st, int dr, int v[], int &p, int &q ) {
    p = q = st;
    for ( int i = st; i < dr; i++ ) {
        if ( v[i] < v[dr] ) {
            swap( v[p], v[q++] );
            swap( v[i], v[p++] );
        }
        else if ( v[i] == v[dr] )
            swap ( v[i], v[q++] );
    }
    swap (v[dr], v[q++]);
}

void qsort3(int st, int dr, int v[] ) {
    if ( st >= dr )
        return;
    int p, q;
    partitie3(st, dr, v, p, q);
    qsort3(st,p-1,v);
    qsort3(q,dr,v);
}

int main () {
    ifstream fin ("algsort.in");
    ofstream fout ("algsort.out");
    int n;
    fin>>n;
    for ( int i = 0; i < n; i++ )
        fin>>v[i];
    shuffle(v, n);
    qsort3(0,n-1,v);
    for ( int i = 0; i < n; i++ )
        fout<<v[i]<<" ";
    return 0;
}