Advertisement
AlexDanilin

C8. Урок 4 Отладочные макроопределения

Aug 18th, 2023
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <numeric>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. // функция выводит элементы контейнера через запятую
  9. template <typename It>
  10. void PrintRangeComma(It range_begin, It range_end) {
  11.     if (range_begin == range_end) {
  12.         return;
  13.     }
  14.     for (auto it = range_begin;;) {
  15.         cout << *it;
  16.         ++it;
  17.         if (it == range_end) {
  18.             break;
  19.         }
  20.         cout << ", "s;
  21.     }
  22.     cout << endl;
  23. }
  24.  
  25. template <typename RandomIt>
  26. void MergeSort(RandomIt range_begin, RandomIt range_end) {
  27.     // 1. Если диапазон содержит меньше 2 элементов, выходим из функции
  28.     int range_length = range_end - range_begin;
  29.     if (range_length < 2) {
  30.         return;
  31.     }
  32.  
  33.     // 2. Создаём вектор, содержащий все элементы текущего диапазона
  34.     vector<typename RandomIt::value_type> elements(range_begin,range_end);
  35.  
  36.     // 3. Разбиваем вектор на две равные части
  37.     auto mid = elements.begin() + range_length / 2;
  38.  
  39.     // 4. Вызываем функцию MergeSort от каждой половины вектора
  40.     MergeSort(elements.begin(), mid);
  41.     MergeSort(mid, elements.end());
  42.  
  43.     // 5. С помощью алгоритма merge сливаем отсортированные половины
  44.     // в исходный диапазон
  45.     // merge -> http://ru.cppreference.com/w/cpp/algorithm/merge
  46.      merge(elements.begin(), mid, mid, elements.end(), range_begin);
  47. }
  48.  
  49. int main() {
  50.     vector<int> test_vector(10);
  51.  
  52.     // iota             -> http://ru.cppreference.com/w/cpp/algorithm/iota
  53.     // Заполняет диапазон последовательно возрастающими значениями
  54.     iota(test_vector.begin(), test_vector.end(), 1);
  55.  
  56.     // random_shuffle   -> https://ru.cppreference.com/w/cpp/algorithm/random_shuffle
  57.     // Перемешивает элементы в случайном порядке
  58.     random_shuffle(test_vector.begin(), test_vector.end());
  59.  
  60.     // Выводим вектор до сортировки
  61.     PrintRangeComma(test_vector.begin(), test_vector.end());
  62.  
  63.     // Сортируем вектор с помощью сортировки слиянием
  64.     MergeSort(test_vector.begin(), test_vector.end());
  65.  
  66.     // Выводим результат
  67.     PrintRangeComma(test_vector.begin(), test_vector.end());
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement