Files
ARPZ-s1-pr5/task6.cpp
2024-12-14 12:19:04 +03:00

46 lines
1.3 KiB
C++

#include "myalgorithms.h"
#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);
}
}