def merge_sort(items):
if len(items) <= 1:
return items
middle_index = len(items) // 2
left_split = items[:middle_index]
right_split = items[middle_index:]
left_sorted = merge_sort(left_split)
right_sorted = merge_sort(right_split)
return merge(left_sorted, right_sorted)
def merge(left, right):
result = []
while (left and right):
if left[0] < right[0]:
result.append(left[0])
left.pop(0)
else:
result.append(right[0])
right.pop(0)
if left:
result += left
if right:
result += right
return result
unordered_list1 = [356, 746, 264, 569, 949, 895, 125, 455]
ordered_list1 = merge_sort(unordered_list1)
Я понял, когда функция merge_sort()
вызывается в первый раз, когда она вызывает себя рекурсивно, пока не останутся только отдельные элементы, а затем при возврате снова вызовет функцию merge()
, которая вернет упорядоченный подсписок, но как тогда функция merge_sort () вызывает себя, чтобы перейти на следующий элемент? Я попытался визуализировать код, но застрял, когда оператор return merge(left_sorted, right_sorted)
снова переходит на запуск merge_sort()
.
Может кто-нибудь объяснить, как return merge(left_sorted, right_sorted)
снова вызывает merge_sort()
после того, как в первый раз возвращается упорядоченный подсписок.