Cod sursa(job #1024043)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 8 noiembrie 2013 01:47:41
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
using namespace std;

void merge(int *array, const int &left, const int &right) {
  int *temp = new int[right - left + 1];
  int mid = left + (right - left) / 2;
  int i = left, j = mid + 1, k = 0;
  while (i <= mid && j <= right) {
    if (array[i] <= array[j]) {
      temp[k++] = array[i++];
    } else {
      temp[k++] = array[j++];
    }
  }
  while (i <= mid) {
    temp[k++] = array[i++];
  }
  while (j <= right) {
    temp[k++] = array[j++];
  }
  for (i = 0; i < k; ++i) {
    array[left + i] = temp[i];
  }
  delete[] temp;
}

void mergeSort(int *array, const int &left, const int &right) {
  if (right - left < 1) {
    return;
  }
  const int mid = left + (right - left) / 2;
  mergeSort(array, left, mid);
  mergeSort(array, mid + 1, right);
  merge(array, left, right);
}

int main() {
  int N, i;

  ifstream in("algsort.in");
  in >> N;
  int *array = new int[N];
  for (i = 0; i < N; ++i) {
    in >> array[i];
  }
  in.close();

  mergeSort(array, 0, N - 1);

  ofstream out("algsort.out");
  for (i = 0; i < N; ++i) {
    out << array[i] << " ";
  }
  out.close();

  delete[] array;
  return 0;
}