another recursive merge sort