fork download
  1. #include <algorithm>
  2. #include <vector>
  3. #include <string>
  4. #include <iostream>
  5. #include <iterator>
  6.  
  7. template<class BiDirIt, class Compare = std::less<>>
  8. void merge_sort(BiDirIt first, BiDirIt last, Compare cmp = Compare{})
  9. {
  10. auto const N = std::distance(first, last);
  11. if (N <= 1) return;
  12. auto const middle = std::next(first, N / 2);
  13. merge_sort(first, middle, cmp); // assert(std::is_sorted(first, middle, cmp));
  14. merge_sort(middle, last, cmp); // assert(std::is_sorted(middle, last, cmp));
  15. std::inplace_merge(first, middle, last, cmp); // assert(std::is_sorted(first, last, cmp));
  16. }
  17.  
  18. int main()
  19. {
  20. std::vector<std::string> strV = {"Test", "Big Test", "Small", "0"};
  21.  
  22. merge_sort(strV.begin(), strV.end(), [](const std::string& lft, const std::string& rt)
  23. { return lft.size() < rt.size();});
  24.  
  25. std::copy(strV.begin(), strV.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
  26. }
Success #stdin #stdout 0s 3420KB
stdin
Standard input is empty
stdout
0
Test
Small
Big Test