Cod sursa(job #2952036)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 8 decembrie 2022 09:04:28
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
int v[100001];
void quicksort(int a[], int st, int dr ){
  if( st >= dr )
    return ;
  int piv = ( rand() % (dr-st+1) ) + st ;
  swap( a[piv] , a[dr] );
  int freeuse = st;
  for( int i = st ; i < dr ; i++ ){
    if( a[i] < a[dr] )
      swap( a[freeuse++] , a[i] );
  }
  swap( a[dr] , a[freeuse]);
  quicksort( a , st , freeuse - 1 );
  quicksort( a , freeuse + 1, dr);
}



#include <iostream>
#define NMAX 100000
using namespace std;
int v[NMAX+1],copie[NMAX+1];
void interclasare(int st1, int dr1, int st2, int dr2){
    int x=0;
    int st=st1;
    while ( st1 <= dr1 && st2 <=   dr2 ) {
      if ( v[st1] < v[st2] ) {
        copie[x] = v[st1];
        st1++;
      } else {
        copie[x] = v[st2];
        st2++;
      }
      x++;
    }
    while ( st1 <= dr1 ) {
      copie[x] = v[st1];
      st1++;
      x++;
    }
    while ( st2 <= dr2 ) {
      copie[x] = v[st2];
      st2++;
      x++;
    }
    for( int i = 0 ; i < x ; i++ )
      v[st+i]=copie[i];
}


void mergesort(int v[], int st, int dr){
  if( st == dr)
    return ;
  int mij=(st + dr)/2;
  mergesort( v , st , mij );
  mergesort( v , mij + 1 , dr );
  interclasare( st , mij , mij +1 , dr );
}

int main()
{
    int n, i;
    cin >> n ;
    for( i = 1 ; i <= n ; i++ )
      cin >> v[i];
    mergesort( v , 1 , n );
    for( i = 1 ; i <= n ; i++ )
      cout<<v[i]<<" ";
    return 0;
}