Pagini recente » Cod sursa (job #643792) | Cod sursa (job #571492) | Cod sursa (job #2903479) | Cod sursa (job #1528633) | Cod sursa (job #2359891)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
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 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;
}