merge from the tail, backwards. in place with O(n)