Pagini recente » Cod sursa (job #2879954) | Cod sursa (job #2325578) | Cod sursa (job #2319415) | Cod sursa (job #2915600) | Cod sursa (job #2692782)
#include <stdio.h>
int v[ 500000 ];
void intersectie( int v[], int st, int mij, int dr ){
int left = st;
int right = mij + 1;
int a[ dr - st + 1 ], poz = 0;
while( left <= mij && right <= dr )
if( v[ left ] <= v[ right ] )
a[ poz++ ] = v[ left++ ];
else a[ poz++ ] = v[ right++ ];
while( left <= mij )
a[ poz++ ] = v[ left++ ];
while( right <= dr )
a[ poz++ ] = v[ right++ ];
for( int i = st; i <= dr; i++ )
v[ i ] = a[ i - st ];
}
void mergesort( int v[], int st, int dr ){
if( st == dr )
return;
int mij = ( st + dr ) >> 1;
mergesort( v, st, mij );
mergesort( v, mij + 1, dr );
intersectie( v, st, mij, dr );
}
int main()
{
int n;
FILE *fin = fopen( "algsort.in", "r" );
fscanf( fin, "%d", &n );
for( int i = 0; i < n; i++ )
fscanf( fin, "%d", &v[ i ] );
fclose( fin );
mergesort( v, 0, n - 1 );
FILE *fout = fopen( "algsort.out", "w" );
for( int i = 0; i < n; i++ )
fprintf( fout, "%d ", v[ i ] );
fclose( fin );
return 0;
}