in situ mergesort