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: