Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. template <typename RandomIt>
  7. void MergeSort(RandomIt range_begin, RandomIt range_end) {
  8.     auto vec = vector<typename iterator_traits<RandomIt>::value_type>(range_begin, range_end);
  9.  
  10.     if (vec.size() < 2) {
  11.         return;
  12.     }
  13.  
  14.     MergeSort(vec.begin(), vec.begin() + vec.size() / 2);
  15.     MergeSort(vec.begin() + vec.size() / 2, vec.end());
  16.  
  17.     auto first_half(vec.begin());
  18.     auto second_half(vec.begin() + vec.size() / 2);
  19.  
  20.     while (first_half != vec.begin() + vec.size() / 2 && second_half != vec.end()) {
  21.         if (*first_half < *second_half) {
  22.             *range_begin = *first_half;
  23.             ++first_half;
  24.         } else {
  25.             *range_begin = *second_half;
  26.             ++second_half;
  27.         }
  28.         ++range_begin;
  29.     }
  30.  
  31.     while (first_half != vec.begin() + vec.size() / 2) {
  32.         *range_begin = *first_half;
  33.         ++first_half;
  34.         ++range_begin; 
  35.     }
  36.  
  37.     while (second_half != vec.end()) {
  38.         *range_begin = *second_half;
  39.         ++second_half;
  40.         ++range_begin;
  41.     }
  42. }
  43.  
  44. int main() {
  45.   vector<int> v = {6, 4, 7, 6, 4, 4, 0, 1};
  46.   MergeSort(begin(v), end(v));
  47.   for (int x : v) {
  48.     cout << x << " ";
  49.   }
  50.   cout << endl;
  51.   return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement