Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <iterator>
- #include <algorithm>
- #include <numeric>
- using namespace std;
- template <typename It>
- void PrintRange(It range_begin, It range_end) {
- for (auto it = range_begin; it != range_end; ++it) {
- cout << *it << " "s;
- }
- cout << endl;
- }
- template <typename RandomIt>
- void MergeSort(RandomIt range_begin, RandomIt range_end) {
- // 1. Если диапазон содержит меньше 2 элементов, выходим из функции
- int range_length = range_end - range_begin;
- if (range_length < 2) {
- return;
- }
- // 2. Создаем вектор, содержащий все элементы текущего диапазона
- vector<typename RandomIt::value_type> elements(range_begin, range_end);
- // 3. Разбиваем вектор на две равные части
- auto mid = elements.begin() + range_length / 2;
- // 4. Вызываем функцию MergeSort от каждой половины вектора
- MergeSort(elements.begin(), mid);
- MergeSort(mid, elements.end());
- // 5. С помощью алгоритма merge сливаем отсортированные половины
- // в исходный диапазон
- merge(elements.begin(), mid, mid, elements.end(), range_begin);
- }
- int main() {
- vector<int> v = { 6, 4, 7, 6, 4, 4, 0, 1 };
- MergeSort(begin(v), end(v));
- for (int x : v) {
- cout << x << " ";
- }
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement