Cod sursa(job #1024092)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 8 noiembrie 2013 11:13:31
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;

// Hoare's partition
int partition(int *v, const int &left, const int &right, const int &piv) {
  int i = left - 1, j = right + 1, piv_val = v[piv];
  while (1) {
    do {
      ++i;
    } while (v[i] < piv_val);
    do {
      --j;
    } while (v[j] > piv_val);
    if (i < j) {
      swap(v[i], v[j]);
      ++i; --j;
    } else {
      return j;
    }
  }
}

void quickSort(int *v, const int &left, const int &right) {
  if (left < right) {
    int piv = left + rand() % (right - left + 1); // pivot randomziat
    piv = partition(v, left, right, piv);
    quickSort(v, left, piv - 1);
    quickSort(v, piv + 1, right);
  }
}

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

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

  quickSort(v, 0, N - 1);

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

  delete[] v;
  return 0;
}