Pagini recente » Cod sursa (job #1622714) | Cod sursa (job #1498746) | Cod sursa (job #2246790) | Cod sursa (job #651628) | Cod sursa (job #498729)
Cod sursa(job #498729)
#include <cstdio>
#include <algorithm>
using namespace std;
int a[500000];
int c[500000];
int * mergeSort( const int n ){
int p;
int i, j, li, lj,cc(0);
int *ap, *cp;
ap=a;cp=c;
for ( p = 1; p < n; p <<= 1 ){
li = 0;
lj = 0;
while( lj + p < n ){
i = lj;
j = lj+p;
li=i+p;
lj=min(n,j+p);
while ( i < li || j < lj )
cp [ cc ++ ] = ( ( j == lj ) || ( i < li && ap [ i ] < ap [ j ] ) ) ? ap [ i ++ ] : ap [ j ++ ];
/*j = li - p - 1;
for ( i = lj - 1; i > j; -- i )
a [ i ] = c [ -- cc ];*/
}
for ( i = lj; i < n; ++ i )
cp [ i ] = ap [ i ];
swap(ap,cp);
cc=0;
}
return ap;
}
int main(){
int i,n;
int *p;
freopen( "algsort.in", "r", stdin );
freopen( "algsort.out", "w", stdout );
scanf( "%d", &n );
for( i = 0; i < n; i++ )
scanf( "%d", a+i );
p = mergeSort( n );
for( i = 0; i < n; i++ )
printf( "%d ", p[i] );
return 0;
}