Files
ARPZ-s1-pr5/task6.cpp
2024-12-14 02:57:41 +03:00

59 lines
1.5 KiB
C++

#include <iostream>
#include <vector>
int partition(std::vector<int> &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<int> &vec, int low, int high)
{
if (low < high)
{
// При помощи функции отрезка выбираем опорный элемент.
int pi = partition(vec, low, high);
// Применяем быструю сортировку к левому и правому отрезку
quickSort(vec, low, pi - 1);
quickSort(vec, pi + 1, high);
}
}
int main()
{
std::vector<int> vec = {12, 11, 13, 5, 6};
quickSort(vec, 0, vec.size() - 1);
for (int i : vec)
{
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}