Сортировка слиянием имеет две фазы: (1) разделить и (2) победить / объединить. Фаза разделения разделяет массив на левую и правую половины. Фаза слияния объединяет результаты. Ваша функция merge_sort () должна вызываться рекурсивно в левой половине и правой половине, каждая из которых возвращает отсортированный подмассив. Затем для объединения двух подмассивов должна быть вызвана функция слияния.
По сути, когда вы хотите отсортировать массив, рекурсивная функция делит массив пополам во время рекурсии, а затем объединяет отсортированные половины по мере раскручивания рекурсии, что-то вроде это,
# merge sort array charles
def merge_sort ( charles )
return if charles.length < 2
k = charles.length
L = merge_sort(charles[0:k/2])
R = merge_sort(charles[k/2+1:k])
# missing merge
return merge(L,R)
end