added top down merge sort