--sas

Untitled

May 3rd, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <random>
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <numeric>
  7. #include <random>
  8.  
  9. using namespace std;
  10.  
  11. template <typename T>
  12. ostream& operator << (ostream& os, const vector<T>& v) {
  13.     for (const auto& c : v)
  14.         os << c << " ";
  15.     return os;
  16. }
  17.  
  18. template <typename RandomIt>
  19. void MergeSort(RandomIt range_begin, RandomIt range_end) {
  20.     if (distance(range_begin, range_end) < 2)
  21.         return;
  22.     vector<typename RandomIt::value_type> v(range_begin, range_end);
  23.  
  24.     auto middle = v.begin() + v.size()/2;
  25.     MergeSort(v.begin(), middle);
  26.     MergeSort(middle, v.end());
  27.     merge(v.begin(), middle, middle, v.end(), range_begin);
  28. }
  29.  
  30. //template <typename RandomIt>
  31. //void MergeSort(RandomIt range_begin, RandomIt range_end) {
  32. //    if (distance(range_begin, range_end) < 2)
  33. //        return;
  34. //    vector<typename RandomIt::value_type> v(range_begin, range_end);
  35. //
  36. //    auto one = v.begin() + v.size()/3;
  37. //    auto two = one + v.size()/3;
  38. //    MergeSort(v.begin(), one);
  39. //    MergeSort(one, two);
  40. //    MergeSort(two, v.end());
  41. //    vector<typename RandomIt::value_type> v1;
  42. //    merge(v.begin(), one, one, two, back_inserter(v1));
  43. //    merge(v1.begin(), v1.end(), two, v.end(), range_begin);
  44. //}
  45.  
  46. //template <typename RandomIt>
  47. //void MergeSort(RandomIt range_begin, RandomIt range_end) {
  48. //    if (distance(range_begin, range_end) < 2) {
  49. //        return;
  50. //    }
  51. //    auto middle = range_begin + distance(range_begin, range_end)/2;
  52. //    MergeSort(range_begin, middle);
  53. //    MergeSort(middle, range_end);
  54. //    auto first1 = range_begin, last1 = middle, first2 = middle, last2 = range_end;
  55. //    while (first1 != last1) {
  56. //        if (first2 == last2)
  57. //            break;
  58. //        if (*first2 < *first1) {
  59. //            swap(first1, first2);
  60. //
  61. //        }
  62. //    }
  63. //}
  64. //
  65. int main() {
  66.     int N;
  67.     cin >> N;
  68.     vector<int> v(N);
  69.     iota(v.begin(), v.end(), 1);
  70.     shuffle(v.begin(), v.end(), std::mt19937(std::random_device()()));
  71.     cout << v << endl;
  72.     MergeSort(v.begin(), v.end());
  73.     cout << v << endl;
  74.     return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment