Для вдохновения посмотрите на реализацию inplace_sort
в STL.Центральная часть алгоритма - умное вращение.Конечно, это требует обратного обхода, которого вы могли бы достичь с помощью рекурсии.
В двух словах, часть слияния проходит по линиям
merge (begin, mid, end)
left_mid = middle(begin, mid)
right_mid = lower_bound(left_mid.value, mid, end)
pivot = rotate(left_mid, mid, right_mid)
merge(left, left_mid, pivot)
merge(pivot, right_mid, end)
pivot
выше, это узел вкоторый начальный begin
приземлился.Выход из рекурсии для краткости опущен.