мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| glossary:math:algorithms:merge_sort [2025/09/21 13:25] – создано radi0dev | glossary:math:algorithms:merge_sort [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 19: | Строка 19: | ||
| Таким образом, | Таким образом, | ||
| + | |||
| + | ===== Пример реализации ===== | ||
| + | |||
| + | <code cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | // Рекурсивная реализация merge (слияния) двух отсортированных векторов | ||
| + | std:: | ||
| + | std:: | ||
| + | sorted_list.reserve(left.size() + right.size()); | ||
| + | |||
| + | size_t i = 0, j = 0; | ||
| + | // Сравниваем элементы левой и правой части и сливаем их в один вектор | ||
| + | while (i < left.size() && j < right.size()) { | ||
| + | if (left[i] < right[j]) { | ||
| + | sorted_list.push_back(left[i]); | ||
| + | ++i; | ||
| + | } else { | ||
| + | sorted_list.push_back(right[j]); | ||
| + | ++j; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Добавляем оставшиеся элементы (одна из частей уже пустая) | ||
| + | while (i < left.size()) { | ||
| + | sorted_list.push_back(left[i]); | ||
| + | ++i; | ||
| + | } | ||
| + | while (j < right.size()) { | ||
| + | sorted_list.push_back(right[j]); | ||
| + | ++j; | ||
| + | } | ||
| + | |||
| + | return sorted_list; | ||
| + | } | ||
| + | |||
| + | // Рекурсивная реализация merge sort, возвращающая новый вектор | ||
| + | std:: | ||
| + | if (arr.size() <= 1) return arr; // базовый случай: | ||
| + | |||
| + | size_t mid = arr.size() / 2; | ||
| + | std:: | ||
| + | std:: | ||
| + | |||
| + | // Рекурсивная сортировка левой и правой половин | ||
| + | std:: | ||
| + | std:: | ||
| + | |||
| + | // Слияние отсортированных половин | ||
| + | return merge(sorted_left, | ||
| + | } | ||
| + | |||
| + | int main() { | ||
| + | std:: | ||
| + | std:: | ||
| + | |||
| + | std::cout << " | ||
| + | for (size_t i = 0; i < sorted_array.size(); | ||
| + | if (i) std::cout << ", "; | ||
| + | std::cout << sorted_array[i]; | ||
| + | } | ||
| + | std::cout << std::endl; | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||