Pagini recente » Cod sursa (job #1434606) | Cod sursa (job #3280793) | Cod sursa (job #3182621) | Cod sursa (job #484510) | Cod sursa (job #659111)
Cod sursa(job #659111)
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
const int MAX_N = 500002;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";
vector < int > a;
int N;
void read(){
FILE *f;
int x;
f = fopen( infile, "rt" );
fscanf( f, "%d", &N );
for( int i = 1; i <= N; ++i ){
fscanf( f, "%d", &x );
a.push_back( x );
}
}
int partition( int left, int right ){
int i = left - 1, j = right + 1, val = a[ left + rand() % ( right - left + 1) ];
while( 1 ){
do
i++;
while( a[ i ] < val );
do
j--;
while( a[ j ] > val );
if( i < j )
swap( a[ i ], a[ j ] );
else
return j;
}
}
void sort( int left, int right ){
if( left < right ){
int div = partition( left, right );
sort( left, div );
sort( div + 1, right );
}
}
void write(){
FILE *g;
g = fopen( outfile, "wt" );
for( int i = 0; i < N; ++i )
fprintf( g, "%d ", a[ i ] );
}
int main(){
read();
sort( 0, N - 1 );
write();
return 0;
}