Recursive merge sort