Pagini recente » Cod sursa (job #724514) | Cod sursa (job #1246507) | Cod sursa (job #82327) | Cod sursa (job #909897) | Cod sursa (job #1008367)
#include <cstdio>
#include <cassert>
#define MAX_N 500000
int n, v[MAX_N];
void read( FILE *fin ) {
assert( fscanf( fin, "%d", &n ) == 1 );
for ( int i = 0; i < n; ++i )
assert( fscanf( fin, "%d", &v[i] ) == 1 );
}
void write( FILE *fout ) {
for ( int i = 0; i < n; ++i )
fprintf( fout, "%d ", v[i] );
}
void merge( int left, int mid, int right ) {
int c[MAX_N];
int i = left, j = mid + 1, k = 0;
while ( i <= mid && j <= right ) {
if ( v[i] < v[j] ) {
c[k] = v[i];
++i;
}
else {
c[k] = v[j];
++j;
}
++k;
}
while ( i <= mid ) {
c[k] = v[i];
++i;
++k;
}
while ( j <= right ) {
c[k] = v[j];
++j;
++k;
}
for ( i = 0; i < k; ++i )
v[left + i] = c[i];
}
void merge_sort( int left, int right ) {
if ( left == right )
return;
int mid = ( left + right ) >> 1;
merge_sort( left, mid );
merge_sort( mid + 1, right );
merge( left, mid, right );
}
int main() {
FILE *fin, *fout;
fin = fopen( "algsort.in", "r" );
read( fin );
fclose( fin );
merge_sort( 0, n - 1 );
fout = fopen( "algsort.out", "w" );
write( fout );
fclose( fout );
}