From 5a118de8034b83d7843baa3524a53fa6af7b7abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Fri, 13 May 2016 00:28:29 +0200 Subject: [PATCH] Added recursive inplace_stable_sort implementation --- include/boost/move/algo/detail/merge_sort.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/boost/move/algo/detail/merge_sort.hpp b/include/boost/move/algo/detail/merge_sort.hpp index 8101fce..892639b 100644 --- a/include/boost/move/algo/detail/merge_sort.hpp +++ b/include/boost/move/algo/detail/merge_sort.hpp @@ -41,6 +41,21 @@ namespace movelib { static const unsigned MergeSortInsertionSortThreshold = 16; +template +void inplace_stable_sort(RandIt first, RandIt last, Compare comp) +{ + typedef typename iterator_traits::size_type size_type; + if (size_type(last - first) <= size_type(MergeSortInsertionSortThreshold)) { + insertion_sort(first, last, comp); + return; + } + RandIt middle = first + (last - first) / 2; + inplace_stable_sort(first, middle, comp); + inplace_stable_sort(middle, last, comp); + merge_bufferless_ONlogN_recursive + (first, middle, last, size_type(middle - first), size_type(last - middle), comp); +} + // @endcond template