#include "myalgorithms.h" #include #include int partition(std::vector &vec, int low, int high) { // Функция отрезка для подготовки массива // и выбора опорного элемента // Выбираем последний элемент в качестве опорного int key = vec[high]; // Индекс предпоследнего элемента int i = (low - 1); for (int j = low; j <= high - 1; j++) { // Если значение элемента j меньше либо равно значению опорного, // то меняем местами if (vec[j] <= key) { i++; std::swap(vec[i], vec[j]); } } // Устанавливаем опорный элемент в позицию полученного i std::swap(vec[i + 1], vec[high]); // Возвращаем индекс отрезка return (i + 1); } void quickSort(std::vector &vec, int low, int high) { if (low < high) { // При помощи функции отрезка выбираем опорный элемент. int pi = partition(vec, low, high); // Применяем быструю сортировку к левому и правому отрезку quickSort(vec, low, pi - 1); quickSort(vec, pi + 1, high); } }