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