Iterative merge sort
I suggest you try to run your algorithm on a few small arrays and see if it works.
Merge sort can be implemented in-place, and the same is true in your case.
Consider the recursive version of merge sort. Apart from calling itself recursively, the only other operation is merge. See if you can make a sequential list of all calls made to merge (with their parameters).