#include "ShakerSort.h"
ShakerSort::ShakerSort(int n, int* x) : Sort(n, x) {
this->algName = "Sheiker Sort";
}
void ShakerSort::Run(void)
{
int last = this->n - 1;
int left = 1, right = this->n - 1;
/* основной цикл до тех пор пока границы
отсортированных с разных сторон отрезков
не пересекутся */
do {
/* проход снизу вверх */
for (int j = right; j > 0; j--) {
if (this->x[j-1] > this->x[j]) {
this->Swap(j-1, j);
last = j;
}
}
/* Корректируем нижнюю границу
до которой уже все элементы получились
отсортироваными */
left = last + 1;
/* проход сверху вниз */
for (int j = 1; j <= right; j++) {
if (this->x[j-1] > this->x[j]) {
this->Swap(j-1, j);
last = j;
}
}
/* Корректируем верхнюю границу
после которой уже все элементы получились
отсортироваными */
right = last - 1;
} while (left < right);
}
ShakerSort::~ShakerSort(void)
{
}