Pagini recente » Cod sursa (job #3233914) | Cod sursa (job #3253918) | Cod sursa (job #1840954) | Cod sursa (job #2515865) | Cod sursa (job #2359824)
#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;
}