complete merge_sort