Pagini recente » Cod sursa (job #2239582) | Cod sursa (job #2763793) | Cod sursa (job #646402) | Cod sursa (job #1969468) | Cod sursa (job #2623400)
#include <stdio.h>
#define MAXN 500000
int v[MAXN];
void merge( int st, int dr, int mij ) {
int n = 0, m = 0, l[MAXN], r[MAXN], i, j, k;
for ( i = st; i <= mij; ++i ) {
l[n++] = v[i];
}
for ( i = mij + 1; i <= dr; ++i ) {
r[m++] = v[i];
}
i = j = 0;
k = st;
while ( i < n && j < m ) {
if ( l[i] < r[j] ) {
v[k] = l[i];
++i;
} else {
v[k] = r[j];
++j;
}
++k;
}
while ( i < n ) {
v[k++] = l[i++];
}
while ( j < m ) {
v[k++] = r[j++];
}
}
void mergeSort( int st, int dr ) {
int mij = (st + dr) / 2;
if ( st < dr ) {
mergeSort( st, mij );
mergeSort( mij + 1, dr );
merge( st, dr, mij );
}
}
int main() {
FILE *fin = fopen( "algsort.in", "r" );
FILE *fout = fopen( "algsort.out", "w" );
int n, i;
fscanf( fin, "%d", &n );
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &v[i] );
}
mergeSort( 0, n - 1 );
for ( i = 0; i < n; ++i ) {
fprintf( fout, "%d ", v[i] );
}
fclose( fin );
fclose( fout );
return 0;
}