Cod sursa(job #1016034)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 25 octombrie 2013 17:09:31
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

void swap (int *v, int i1, int i2)
{
  int aux = v[i1];
  v[i1] = v[i2];
  v[i2] = aux;
}

void quickSort (int *v, int left, int right)
{
  if (right - left <= 1)
    return;

  // Set seed
  srand(time(NULL));

  // Select a idx between left and right
  int pivot = rand() % (right - left) + left;

  int cpLeft = left;
  int cpRight = right;
  while (cpLeft <= cpRight)
    {
      while (v[cpLeft] < v[pivot])
	++cpLeft;
      while (v[cpRight] > v[pivot])
	--cpRight;
      
      if (cpLeft <= cpRight)
	{
	  swap(v, cpLeft, cpRight);
	  ++cpLeft;
	  --cpRight;
	}
    }

  if (left < cpRight)
    quickSort(v, left, cpRight);
  if (cpLeft < right)
    quickSort(v, cpLeft, right);
}

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

  int n; cin >> n;
  int v[500000];
  for (int i = 0; i < n; ++i)
    cin >> v[i];

  quickSort(v, 0, n - 1);

  for (int i = 0; i < n; ++i)
    cout << v[i] << " ";

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

  return 0;
}