top down merge sort implementation