Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #pragma once
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5.  
  6.  
  7. template <class Iter>
  8. void mergeSort(Iter start, Iter end) {
  9.     Iter it1 = start;
  10.    
  11.     std::vector<typename std::iterator_traits<Iter>::value_type> result;
  12.     size_t size = end - start;
  13.     Iter mid = start + size / 2;
  14.     Iter it2 = mid;
  15.    
  16.     while (it1 < mid && it2 < end) {
  17.         if (*it1 < *it2)
  18.             result.push_back(*it1++);
  19.         else
  20.             result.push_back(*it2++);
  21.     }
  22.  
  23.     while (it1 < mid)
  24.         result.push_back(*it1++);
  25.     while (it2 < end)
  26.         result.push_back(*it2++);
  27.    
  28.     std::copy(result.begin(), result.end(), start);
  29. }
  30.  
  31.  
  32. template <class Iter>
  33. int mergeSortRecursive(Iter start, Iter end) {
  34.     if (start + 1 == end) return (0);
  35.     size_t size = end - start;
  36.     Iter mid = start + size / 2;
  37.     mergeSortRecursive(start, mid);
  38.     mergeSortRecursive(mid, end);
  39.     mergeSort(start, end);
  40.     return (-10);
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement