However, when running my program, it seemed pretty slow, and I was wondering if there were any places in my code where there is an inefficiency, or if the entire implementation (recursive in most places, but iterative in parts of the merging) is the wrong way forward.
I believe your merge function is not only slow but also doesn't merge properly in one pass, which is why your program seems to require calling it four times.
Not the answer you're looking for? Browse other questions tagged c++ mergesort or ask your own question.