Cod sursa(job #2359824)

Utilizator cezarus30cezarus30 cezarus30 Data 1 martie 2019 09:51:20
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

int v[100005];

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 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[i], v[p++] );
            swap( v[i], v[q++] );
        }
        else if ( v[i] == v[dr] )
            swap ( v[i], v[q++] );
    }
    swap (v[dr], v[q++]);
}


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 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 () {
    int n;
    in>>n;
    for ( int i = 0; i < n; i++ )
        in>>v[i];
    shuffle(v, n);
    qsort(0,n-1,v);
    for ( int i = 0; i < n; i++ )
        out<<v[i]<<" ";
    return 0;
}