Pagini recente » Monitorul de evaluare | Diferente pentru propuneri/6-arhiva-educationala intre reviziile 3 si 16 | Cod sursa (job #3288051) | Cod sursa (job #201467) | Cod sursa (job #3287946)
#include <fstream>
using namespace std;
ifstream cin ( "algsort.in" );
ofstream cout( "algsort.out" );
#define FR( a, b ) for( int a = 0; a < b; a ++ )
#define FOR( a, c, b) for( int a = c; a < b; a++)
const int Nmax = 5e5+5;
int v[Nmax], aux[Nmax];
void interclasare( int l, int mid, int r ) {
int poz_crt = l, capatS = l, capatD = mid + 1;
while( capatS <= mid && capatD <= r )
if( v[capatS] < v[capatD] )
aux[poz_crt++] = v[capatS++];
else
aux[poz_crt++] = v[capatD++];
if( capatS == (mid + 1) )
FOR( i, capatD, r + 1 )
aux[poz_crt++] = v[i];
else
FOR( i, capatS, mid + 1 )
aux[poz_crt++] = v[i];
FOR( i, l, r + 1 )
v[i] = aux[i];
}
void merge_sort( int l, int r ) {
if( l == r )
return;
int mij = ( l + r ) / 2;
merge_sort( l, mij );
merge_sort( mij + 1, r );
interclasare( l, mij, r );
}
int main()
{
ios::sync_with_stdio( false );
cin.tie( NULL );
cout.tie( NULL );
int n;
cin >> n;
FOR( i, 1, n + 1 )
cin >> v[i];
merge_sort( 1, n );
FOR( i, 1, n + 1 )
cout << v[i] << " ";
return 0;
}