Cod sursa(job #1010918)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 15 octombrie 2013 21:26:05
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <cstdlib>
using namespace std;

#define NMAX 500001

int n, A[NMAX], B[NMAX];

void sort(int left, int right)
{
  // Daca avem un singur element ->> ata ete (e sortat)
  if (left == right)
    return;  

  int middle = (left + right) / 2;

  // Sortam cele 2 jumatati
  sort(left, middle);
  sort(middle + 1, right);
  
  // poz_a -> pozitia din stanga
  // poz_b -> pozitia din mijloc
  // cnt   -> contor pentru interclasare *in place*
  int poz_a, poz_b, cnt;

  // Interclasare
  for (poz_a = left, poz_b = middle + 1, cnt = left; poz_a <= middle || poz_b <= right; )
    if (poz_b > right || poz_a < middle && A[poz_a] < A[poz_b])
      B[cnt++] = A[poz_a++];
    else
      B[cnt++] = A[poz_b++];

  // Copiere elemente sortate in A
  for (int i = left; i <= right; i++)
    A[i] = B[i];
}

int main()
{
  ifstream cin("algsort.in");
  ofstream cout("algsort.out");

  int n;
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> A[i];

  sort(1, n);
 
  for (int i = 1; i <= n; i++)
    cout << A[i] << " ";

  cin.close();
  cout.close();
}