Pagini recente » Cod sursa (job #1836984) | Cod sursa (job #1618050) | Cod sursa (job #277765) | Cod sursa (job #1165149) | Cod sursa (job #806907)
Cod sursa(job #806907)
#include<cstdio>
#define NMAX 500005
int vector[ NMAX ] , b[ NMAX ] , n ;
void msort(int left , int right , int m)
{
int k1 = left , k2 = m+1 , k3 = left ;
while ( (k1 <= m) && (k2 <= right ) )
{
if(vector[ k1 ] <= vector[ k2 ] ) b[ k3++ ] = vector [ k1++ ] ;
else b[ k3++ ] = vector [ k2++ ] ;
}
if( k1 > m )
for( int i = k2 ; i <= right ; ++i )
b[ k3++ ] = vector [ i ] ;
else
for( int i = k1 ; i <= m ; ++i )
b[ k3++ ] = vector [ i ] ;
for(int i=left ; i<=right ; ++i)
vector[i] = b[i] ;
}
void merge ( int left ,int right )
{
if(left == right )return;
else
{
int m = left+ (right-left)/2 ;
merge( left , m );
merge( m+1 , right );
msort( left , right , m) ;
}
}
void citeste ()
{
scanf("%d",&n);
for ( int i = 1 ; i <= n ; ++i)
scanf("%d",&vector[i]);
}
void scrie ()
{
for(int i=1 ; i <= n ; ++i )
printf("%d " , vector[i] );
}
int main()
{
freopen("algsort.in" , "r" , stdin);
freopen("algsort.out" , "w" , stdout);
citeste();
merge( 1 , n );
scrie();
return 0 ;
}