Merge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower order of growth than
insertion sort. Since we are dealing with subproblems, we state each subproblem as sorting a subarray A[p .. r]. Initially, p = 1
and r = n, but these values change as we recurse through subproblems[8].
To sort A[p .. r]: