#include "QuickSort.h"
QuickSort::QuickSort(int n, int* x) : Sort(n, x) {
this->algName = "Quick Sort [Center]";
}
void QuickSort::Run(void)
{
this->Launch(this->x, this->n);
}
void QuickSort::Launch(int* x, int size) {
long i = 0, j = size - 1; // начальные значения
int temp, p;
p = x[ size>>1 ]; // выбираем середину
// процедура разделения
do {
while (x[i] < p) i++;
while (x[j] > p) j--;
if (i <= j) {
temp = x[i]; x[i] = x[j]; x[j] = temp;
this->CountSwap();
i++; j--;
}
} while (i <= j);
// рекурсивные вызовы, если есть, что сортировать
if ( j > 0 ) this->Launch(x, j);
if ( size > i ) this->Launch(x+i, size-i);
}
QuickSort::~QuickSort(void)
{
}