Cod sursa(job #1024041)

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

int medianOf3(int *array, const int &a, const int &b, const int &c) {
  if (array[a] > array[b]) {
    if (array[b] > array[c]) {
      return b;
    } else {
      return c;
    }
  } else {
    if (array[a] > array[c]) {
      return a;
    } else {
      return c;
    }
  }
}

int partition(int *array, const int &left, const int &right) {
  int pivot = medianOf3(array, left, right, (left + right) / 2);
  int pivot_value = array[pivot];
  swap(array[pivot], array[right]);
  int rightmost_lesser = left;
  for (int i = left; i < right; ++i) {
    if (array[i] < pivot_value) {
      swap(array[rightmost_lesser], array[i]);
      ++rightmost_lesser;
    }
  }
  swap(array[right], array[rightmost_lesser]);
  return rightmost_lesser;
}

void quickSort(int *array, const int &left, const int &right) {
  if (left < right) {
    int pivot = partition(array, left, right);
    quickSort(array, left, pivot - 1);
    quickSort(array, pivot + 1, right);
  }
}

int main() {
  int N, i, *array;

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

  quickSort(array, 0, N - 1);

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

  delete[] array;
  return 0;
}