Pagini recente » Cod sursa (job #2943465) | Cod sursa (job #2361407) | Cod sursa (job #26349) | Cod sursa (job #1825252) | Cod sursa (job #659109)
Cod sursa(job #659109)
#include <cstdio>
#include <cstdlib>
const int MAX_N = 500002;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";
int a[ MAX_N ];
int N;
void read(){
FILE *f;
f = fopen( infile, "rt" );
fscanf( f, "%d", &N );
for( int i = 1; i <= N; ++i )
fscanf( f, "%d", &a[ i ] );
}
void swap( int i, int j ){
int aux = a[ i ];
a[ i ] = a[ j ];
a[ j ] = aux;
}
int partition( int left, int right ){
int i = left - 1, j = right + 1, val = a[ i + rand() % ( j - i + 1) ];
while( 1 ){
do
i++;
while( a[ i ] < val );
do
j--;
while( a[ j ] > val );
if( i < j )
swap( i, 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 = 1; i <= N; ++i )
fprintf( g, "%d ", a[ i ] );
}
int main(){
read();
sort( 1, N );
write();
return 0;
}