Python 3.x merge函数如何调用merge\u sort函数? def merge_排序(项目): if len(项目)

Python 3.x merge函数如何调用merge\u sort函数? def merge_排序(项目): if len(项目),python-3.x,algorithm,sorting,mergesort,Python 3.x,Algorithm,Sorting,Mergesort,有谁能解释一下,在第一次返回有序子列表后,return merge(left_sorted,right_sorted)如何再次调用merge_sort() 因为调用merge_sort()的前一个实例仍在堆栈上。使用缩进显示调用嵌套,例如4个元素: def merge_sort(items): if len(items) <= 1: return items middle_index = len(items) // 2 left_split = items[:midd

有谁能解释一下,在第一次返回有序子列表后,return merge(left_sorted,right_sorted)如何再次调用merge_sort()

因为调用merge_sort()的前一个实例仍在堆栈上。使用缩进显示调用嵌套,例如4个元素:

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)

有谁能解释一下,在第一次返回有序子列表后,return merge(left_sorted,right_sorted)如何再次调用merge_sort()

因为调用merge_sort()的前一个实例仍在堆栈上。使用缩进显示调用嵌套,例如4个元素:

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(left\u sorted,right\u sorted)
在第一次返回有序子列表后再次调用
merge\u sort()

merge
不调用
merge\u sort()
,它将两个已排序的子列表合并到一个已排序的列表中

只有
merge\u sort()
递归地调用自身,将其列表参数分成左右两部分,直到将其缩减为单个元素。每一组递归调用后面都有一个合并阶段,在该阶段中,已排序的子列表合并为返回给调用方的已排序子列表

任何人都可以解释如何返回
merge(left\u sorted,right\u sorted)
在第一次返回有序子列表后再次调用
merge\u sort()

merge
不调用
merge\u sort()
,它将两个已排序的子列表合并到一个已排序的列表中


只有
merge\u sort()
递归地调用自身,将其列表参数分成左右两部分,直到将其缩减为单个元素。每一组递归调用之后都有一个合并阶段,在该阶段中,已排序的子列表被合并到一个已排序的子列表中,并返回给调用方……

当它一直到最后一个元素,并且函数总是返回一个已排序的数组时,神奇的事情就会发生。当它一直到最后一个元素,并且函数总是返回一个排序数组时,这可能有助于神奇的发生。这可能会有帮助