merge sort with recursion