top-down merge sort added