nochnoikoshmar1

Untitled

Apr 8th, 2023
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.57 KB | None | 0 0
  1. #include <cmath>
  2. #include <map>
  3. #include <string>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <set>
  7. #include <utility>
  8. #include <vector>
  9. #include <numeric>
  10. #include <chrono>
  11. #include <type_traits>
  12. #include <cassert>
  13. #include <sstream>
  14. #include <unordered_map>
  15. #include <stdexcept>
  16. #include <stack>
  17. using namespace std;
  18.  
  19. // функция, записывающая элементы диапазона в строку
  20. template <typename It>
  21. void PrintRange(It range_begin, It range_end){
  22.     for(auto it = range_begin; it != range_end; ++it){
  23.         cout << *it << " "s;
  24.     }
  25.     cout << endl;
  26. }
  27. //template <typename It>
  28. //auto GetPermutations(It range_begin, It range_end){
  29. //    sort(range_begin, range_end);
  30. //    reverse(range_begin, range_end);
  31. //    vector<string> ans;
  32. //    do{
  33. //        ans.push_back(PrintRange(range_begin, range_end));
  34. //    } while(prev_permutation(range_begin, range_end));
  35. //
  36. //    return ans;
  37. //}
  38. //template <typename RandomIt>
  39. //void MergeSort(RandomIt range_begin, RandomIt range_end){
  40. //    typename iterator_traits<RandomIt>::difference_type i = distance(range_begin, range_end) / 2;
  41. //    cout << " d " << n << endl;
  42. //    vector<RandomIt> tmp;
  43. //    for(n = 0; n < *i; ++n){
  44. //        //typename iterator_traits<RandomIt>::value_type tmp = *range_begin;
  45. //        tmp[n] = range_begin;
  46. //        //cout << tmp[n] << endl;
  47. //        /**range_begin++ = *--range_end;
  48. //        *range_end = tmp;*/
  49. //    }
  50. //}
  51. //template<class BidirIt>
  52. //void MergeSort(BidirIt first, BidirIt last){
  53. //    typename std::iterator_traits<BidirIt>::difference_type n = std::distance(first, last);
  54. //    for(--n; n > 0; n -= 2){
  55. //        typename std::iterator_traits<BidirIt>::value_type tmp = *first;
  56. //
  57. //        *first++ = *--last;
  58. //        *last = tmp;
  59. //    }
  60. //}
  61. //template <typename It>
  62. //void MergeSort(It first, It last){
  63.    /* vector<int> v1(last - first);
  64.     vector<int>::iterator Iter1;
  65.     if(*first < *last){
  66.         typename iterator_traits<It>::difference_type center = (last - first) / 2;
  67.         MergeSort(*first, center);
  68.         MergeSort(++center, *last);
  69.         merge(*first, center, center, *last, v1.begin());
  70.     }*/  
  71.    
  72.    
  73.     /*for(Iter1 = v1.begin(); Iter1 != v1.end(); Iter1++)
  74.         cout << *Iter1 << " "s;*/
  75.  
  76.     //vector<int> left;
  77.     //vector<int> right;
  78.    // vector<int> v1(last - first);
  79.    // vector<int>::iterator middle(first + (last - first) / 2);    
  80.    // vector<int>::iterator Iter;
  81.     /*for(auto it = first; it != last; ++it){
  82.         if(distance(it, middle) > 0){
  83.             left.push_back(*it);
  84.         } else{
  85.             right.push_back(*it);
  86.         }
  87.     }*/
  88.     /*for(Iter = v1.begin(); Iter != v1.end(); Iter++)
  89.         cout << *Iter << " "s;
  90.     cout << endl;*/
  91. //}
  92. //template <typename It>
  93. //void MergeSort(It first, It last){
  94. //    vector<It> left;
  95. //    vector<It> right;
  96. //    for(It it = first; it != last; ++it){
  97. //        if(distance(it, first + (last - first) / 2) > 0){
  98. //            left.push_back(it);
  99. //        } else{
  100. //            right.push_back(it);
  101. //        }
  102. //    }
  103. //    merge(left.begin(), left.end(), right.begin(), right.end(), first,
  104. //        [](int elem1, int elem2){
  105. //            if(elem1 > 0)
  106. //                elem1 = -elem1;
  107. //            if(elem2 > 0)
  108. //                elem2 = -elem2;
  109. //            return elem1 < elem2;
  110. //        }
  111. //    );
  112. //}
  113. template <typename It>
  114. void MergeSort(It first, It last){
  115.     vector<typename iterator_traits<It>::value_type> a(first, last);
  116.     //vector<int> a(first, last);
  117.     //typename iterator_traits<It>::value_type tmp = *first;
  118.     typename iterator_traits<It>::difference_type size = (a.end() - a.begin()) / 2;
  119.    
  120.     MergeSort(a.begin(), a.begin() + size);
  121.     MergeSort(a.begin() + size, a.end());
  122.     merge(a.begin(), a.begin() + size, a.begin() + size, a.end(), first/*,
  123.         [](int elem1, int elem2){
  124.             if(elem1 > 0)
  125.                 elem1 = -elem1;
  126.             if(elem2 > 0)
  127.                 elem2 = -elem2;
  128.             return elem1 < elem2;
  129.         }
  130.     */);    
  131. }
  132.  
  133. int main(){
  134.     vector<int> test_vector(10);
  135.  
  136.     iota(test_vector.begin(), test_vector.end(), 1);
  137.     //random_shuffle(test_vector.begin(), test_vector.end());
  138.     PrintRange(test_vector.begin(), test_vector.end());
  139.     MergeSort(test_vector.begin(), test_vector.end());
  140.     PrintRange(test_vector.begin(), test_vector.end());
  141.     /*auto result = GetPermutations(test_vector.begin(), test_vector.end());
  142.     for(const auto &s : result){
  143.         cout << s;
  144.     }*/
  145.     return 0;
  146. }
  147.  
Advertisement
Add Comment
Please, Sign In to add comment