#include "QuickSortLeft.h"
QuickSortLeft::QuickSortLeft(int n, int* x) : QuickSort(n, x) {
this->algName = "Quick Sort [Left]";
}
void QuickSortLeft::Run(void)
{
return this->Launch(this->x, 0, (this->n - 1));
}
void QuickSortLeft::Launch(int* x, int l, int u) {
// Отбрасываем пустые и
// одноэлементные массивы
if (l >= u) {
return;
}
int tmp;
int m = l;
for (int i = l+1; i <= u; i++) {
if (x[i] < x[l]) {
// делаем swap(++m, i)
tmp = x[++m]; x[m] = x[i]; x[i] = tmp;
this->CountSwap();
}
}
// Делаем swap(l, m):
// Без этого - алгоритм может войти
// в бесконечную рекурсию
tmp = x[l]; x[l] = x[m]; x[m] = tmp;
this->CountSwap();
// вызываем реккурсивно
// для 2-х полученных областей
this->Launch(x, l, m-1);
this->Launch(x, m+1, u);
}
QuickSortLeft::~QuickSortLeft(void)
{
}