Pagini recente » Cod sursa (job #659588) | Cod sursa (job #1830868) | Cod sursa (job #1854660) | Cod sursa (job #2126242) | Cod sursa (job #3326625)
#include <stdio.h>
#include <ctype.h>
#define NMAX 500000
int v[NMAX], aux[NMAX];
FILE *fin, *fout;
int rInt() {
int rez = 0, ch;
while ( !isdigit( ch = fgetc( fin ) ) );
do
rez = rez * 10 + ch - '0';
while ( isdigit( ch = fgetc( fin ) ) );
return rez;
}
void wInt( int x ) {
int cf[11], i = 0;
do {
cf[i++] = x % 10;
x /= 10;
} while ( x > 0 );
for ( i = i - 1; i >= 0; i-- )
fputc( cf[i] + '0', fout );
fputc( ' ', fout );
}
void merge( int v[], int begin, int mj, int end ) { // merge [begin, mj] si [mj + 1, end]
int i = begin, j = mj + 1, n = i;
while ( i <= mj || j <= end )
if ( i <= mj && (j == end + 1 || v[i] <= v[j]) ) {
aux[n++] = v[i++];
} else {
aux[n++] = v[j++];
}
for ( ; begin <= end; begin++ )
v[begin] = aux[begin];
}
void mergesort( int v[], int begin, int end ) {
int mj = (begin + end) / 2;
if ( begin < end ) {
mergesort( v, begin, mj );
mergesort( v, mj + 1, end );
merge( v, begin, mj, end );
}
}
int main() {
int n, i;
fin = fopen( "algsort.in", "r" );
n = rInt();
for ( i = 0; i < n; i++ )
v[i] = rInt();
fclose( fin );
mergesort( v, 0, n - 1 );
fout = fopen( "algsort.out", "w" );
for ( i = 0; i < n; i++ )
wInt( v[i] );
fputc( '\n', fout );
fclose( fout );
return 0;
}