Split the array in half, recursively sort each half, then merge the two sorted halves with a two-pointer scan. Total cost T(n) = 2T(n/2) + O(n) = O(n log n), stable, O(n) extra space.
L[i] <= R[j] (take the left run on ties), which makes merge sort stable.
There are log₂(n) levels of merges, each doing O(n) total work — that is the O(n log n) bound. See junior.md and professional.md for the proof that the merge is correct and stable.