merge sort algorithm explanation