Advertisement
chevengur

СПРИНТ № 5 | Итераторы | Урок 8: Стандартные алгоритмы из <algorithm> 2/2

Jan 25th, 2024
1,050
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <iterator>
  4. #include <algorithm>
  5. #include <numeric>
  6.  
  7. using namespace std;
  8.  
  9. template <typename It>
  10. void PrintRange(It range_begin, It range_end) {
  11.     for (auto it = range_begin; it != range_end; ++it) {
  12.         cout << *it << " "s;
  13.     }
  14.     cout << endl;
  15. }
  16.  
  17. template <typename RandomIt>
  18. void MergeSort(RandomIt range_begin, RandomIt range_end) {
  19.     // 1. Если диапазон содержит меньше 2 элементов, выходим из функции
  20.     int range_length = range_end - range_begin;
  21.     if (range_length < 2) {
  22.         return;
  23.     }
  24.  
  25.     // 2. Создаем вектор, содержащий все элементы текущего диапазона
  26.     vector<typename RandomIt::value_type> elements(range_begin, range_end);
  27.  
  28.     // 3. Разбиваем вектор на две равные части
  29.     auto mid = elements.begin() + range_length / 2;
  30.  
  31.     // 4. Вызываем функцию MergeSort от каждой половины вектора
  32.     MergeSort(elements.begin(), mid);
  33.     MergeSort(mid, elements.end());
  34.  
  35.     // 5. С помощью алгоритма merge сливаем отсортированные половины
  36.     // в исходный диапазон
  37.     merge(elements.begin(), mid, mid, elements.end(), range_begin);
  38. }
  39.  
  40. int main() {
  41.     vector<int> v = { 6, 4, 7, 6, 4, 4, 0, 1 };
  42.     MergeSort(begin(v), end(v));
  43.     for (int x : v) {
  44.         cout << x << " ";
  45.     }
  46.     cout << endl;
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement