46 lines
1.3 KiB
C++
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);
|
|
}
|
|
}
|