Task 6
This commit is contained in:
58
task6.cpp
Normal file
58
task6.cpp
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user