Cod sursa(job #2674098)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 18 noiembrie 2020 16:40:56
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

const int MAXN =  500000;
int v[MAXN];

void mergev( int v[], int left, int mid, int right ){
  int n1 = mid - left + 1;
  int n2 = right - mid;

  int l[n1];
  int r[n2];


  int i, j, k;

  for ( i = 0; i < n1; i++)
    l[i] = v[ left + i ];
  for ( j = 0; j < n2; j++)
    r[j] = v[ mid + 1 + j ];

  i = 0;
  j = 0;
  k = left;

  while( i < n1 && j < n2 ){
    if( l[i] <= r[j] ){
      v[k] = l[i];
      i++;
    }
    else{
      v[k] = r[j];
      j++;
    }
    k++;
  }
  while( i < n1 ){
    v[k] = l[i];
    k++;
    i++;
  }
  while( j < n2 ){
    v[k] = r[j];
    k++;
    j++;
  }
}

void mergesort(int v[], int left, int right ){
  if( left >= right )
    return;

  int mid = ( right + left ) / 2;
  mergesort( v, left, mid );
  mergesort( v, mid + 1, right );

  mergev( v, left, mid, right );
}

void quicksort( int inf, int sup ){
    int i, j, x, t;
    i = inf;
    j = sup;
    x = v[ ( i + j ) / 2 ];
    while( i <= j ){
      while( ( i < sup ) && ( v[i] < x ) )i++;
      while( ( j > inf ) && ( v[j] > x ) )j--;
      if( i <= j ){
        t = v[i];
        v[i] = v[j];
        v[j] = t;
        i++;
        j--;
      }
    }
    if( j > inf ) quicksort( inf, j );
    if( i <sup ) quicksort( i, sup );
}


int main()
{
    int n, i;
    in>>n;
    for( i = 0; i < n; i++ )
      in>>v[i];
    quicksort( 0, n - 1 );
    //mergesort( v,  0, n - 1 );
    //sort( v, v + n );
    for( i = 0; i < n; i++ )
      out<<v[i]<<" ";
    return 0;
}