This visualization, made with invocation_tree, shows how mergesort([3,2,7,1,4,6,5]) repeatedly splits the problem into sub-problems until a sub-problem is sorted, and then recombines the result of two sorted sub-problems using merge() before it returns:
This is the final result as a static image for your viewing pleasure: