Cod sursa(job #3287946)

Utilizator pacelaaaCiurea Pavel pacelaaa Data 20 martie 2025 00:04:04
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#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;
}