мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| glossary:math:algorithms:quick_sort [2025/09/21 13:18] – создано radi0dev | glossary:math:algorithms:quick_sort [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 29: | Строка 29: | ||
| #include < | #include < | ||
| + | // Рекурсивная реализация quick sort, возвращающая новый вектор: | ||
| + | // - принимает const ссылку на входной вектор, | ||
| + | // - возвращает отсортированный вектор | ||
| std:: | std:: | ||
| - | if (arr.size() <= 1) return arr; // базовый случай | + | if (arr.size() <= 1) return arr; // базовый случай: пустой или единичный вектор уже отсортирован |
| | | ||
| + | // Выбор опорного элемента — средний элемент вектора | ||
| int pivot = arr[arr.size() / 2]; | int pivot = arr[arr.size() / 2]; | ||
| | | ||
| + | // Разделяем элементы на три группы: | ||
| + | // left - элементы < pivot | ||
| + | // middle - элементы == pivot (чтобы корректно обрабатывать дубликаты) | ||
| + | // right - элементы > pivot | ||
| std:: | std:: | ||
| - | left.reserve(arr.size()); | + | left.reserve(arr.size()); |
| middle.reserve(arr.size()); | middle.reserve(arr.size()); | ||
| right.reserve(arr.size()); | right.reserve(arr.size()); | ||
| Строка 45: | Строка 53: | ||
| } | } | ||
| | | ||
| + | // Рекурсивно сортируем левую и правую подпоследовательности | ||
| std:: | std:: | ||
| std:: | std:: | ||
| | | ||
| + | // Объединяем результаты: | ||
| std:: | std:: | ||
| - | result.reserve(sorted_left.size() + middle.size() + sorted_right.size()); | + | result.reserve(sorted_left.size() + middle.size() + sorted_right.size()); |
| | | ||
| + | // Копируем элементы в итоговый вектор | ||
| std:: | std:: | ||
| std:: | std:: | ||
| Строка 59: | Строка 70: | ||
| int main() { | int main() { | ||
| - | | + | // Пример использования: |
| - | std:: | + | |
| - | + | // Получаем отсортированный массив (функция возвращает новый вектор) | |
| - | std::cout << " | + | |
| - | for (size_t i = 0; i < sorted_array.size(); | + | |
| - | if (i) std::cout << ", "; | + | // Вывод результата в консоль |
| - | std::cout << sorted_array[i]; | + | |
| - | } | + | for (size_t i = 0; i < sorted_array.size(); |
| - | std::cout << std:: | + | if (i) std::cout << ", "; |
| - | return 0; | + | std::cout << sorted_array[i]; |
| + | } | ||
| + | std::cout << std:: | ||
| + | return 0; | ||
| } | } | ||
| </ | </ | ||