top-down vs bottom-up mergesort