Pagini recente » Cod sursa (job #1535544) | Cod sursa (job #2316353) | Cod sursa (job #891714) | Cod sursa (job #1542274) | Cod sursa (job #2670060)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500000
int v[NMAX], v2[NMAX];
void merge( int v[], int left, int mid, int right ) {
int i, j, k;
i = left;
j = mid + 1;
k = 0;
while( i <= mid && j <= right ) {
if( v[i] < v[j] )
v2[k++] = v[i++];
else
v2[k++] = v[j++];
}
while( i <= mid )
v2[k++] = v[i++];
while( j <= right )
v2[k++] = v[j++];
for( i = left; i <= right; i++ )
v[i] = v2[i-left];
}
void mergesort( int v[], int left, int right ) {
int mid;
if( left != right ) {
mid = ( left + right ) / 2;
mergesort( v, left, mid );
mergesort( v, mid + 1, right );
merge( v, left, mid, right );
}
}
int main() {
FILE *fin, *fout;
int n, i;
fin = fopen( "algsort.in", "r" );
fscanf( fin, "%d", &n );
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
fclose( fin );
mergesort( v, 0, n - 1 );
fout = fopen( "algsort.out", "w" );
for( i = 0; i < n; i++ )
fprintf( fout, "%d ", v[i] );
fclose( fout );
return 0;
}