Pagini recente » Rating Mircea Andrei Bejan (MirceaBejan) | Cod sursa (job #1689409) | Cod sursa (job #1913317) | Cod sursa (job #498723)
Cod sursa(job #498723)
#include <cstdio>
#include<algorithm>
using namespace std;
int a[500000];
int c[500000];
void mergeSort( int a[], const int n ){
int p;
int i, j, li, lj,cc;
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);
cc = 0;
while ( i < li && j < lj )
c [ cc ++ ] = a [ i ] < a [ j ] ? a [ i ++ ] : a [ j ++ ];
while ( i < li )
c [ cc ++ ] = a [ i ++ ];
while ( j < lj )
c [ cc ++ ] = a [ j ++ ];
j = li - p - 1;
for ( i = lj - 1; i > j; -- i )
a [ i ] = c [ -- cc ];
}
}
}
int main(){
int i,n;
freopen( "algsort.in", "r", stdin );
freopen( "algsort.out", "w", stdout );
scanf( "%d", &n );
for( i = 0; i < n; i++ )
scanf( "%d", a+i );
mergeSort( a, n );
for( i = 0; i < n; i++ )
printf( "%d ", a[i] );
return 0;
}