function mergeSort(arr, left, right):
if left >= right: return
mid = (left + right) / 2
mergeSort(arr, left, mid)
mergeSort(arr, mid + 1, right)
merge(arr, left, mid, right)
function merge(arr, left, mid, right):
create temp arrays L and R
copy data to temp arrays
i = 0, j = 0, k = left
while i < len(L) and j < len(R):
if L[i] <= R[j]:
arr[k] = L[i]; i++
else:
arr[k] = R[j]; j++
k++
copy remaining elements