为了账号安全,请及时绑定邮箱和手机立即绑定

这个Python的归并排序哪里出问题了?

这个Python的归并排序哪里出问题了?

梦里花落0921 2019-02-18 13:07:36
完全相同的逻辑在C++下没有问题,Python报RecursionError: maximum recursion depth exceeded in comparison def merge(a:list, start:int, end:int, mid:int): t=deepcopy(a) i=start j=mid k=start while i<mid and j<end: if(t[i]>t[j]): a[k]=t[j] k+=1 j+=1 else: a[k]=t[i] i+=1 k+=1 while i<mid: a[k]=t[i] i+=1 k+=1 while j<end: a[k]=t[j] j+=1 k+=1 def merge_sort(a:list, start:int, end:int): if start<(end-1): mid=(end-start)//2 merge_sort(a, start,mid) merge_sort(a, mid, end) merge(a, start, end, mid)
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

def sort_arr(arr):
  while len(arr) > 1:
    # 数组中元素两两归并,并排序
    arr = [
      sort_arrs(arr[i], arr[i + 1] if i < len(arr) - 1 else [])
      for i in range(0, len(arr), 2)
    ]
  # 全部归并成功后,数组中将只剩一个元素,返回这个元素就是排序结果了
  return arr[0]


def sort_arrs(arr1, arr2=None):
  # 假如需要排序的数组是 [1, 2, 3] 则需要这一步
  # 假如需要排序的数组是 [[1], [2], [3]] 则不需要这一步
  if isinstance(arr1, int):
    arr1 = [arr1]
  if isinstance(arr2, int):
    arr2 = [arr2]
  if not arr2:
    return arr1
  res = []
  index = 0
  for item in arr1:
    while index < len(arr2):
      if item < arr2[index]:
        break
      res.append(arr2[index])
      index += 1
    res.append(item)
  res.extend(arr2[index:])
  return res


print sort_arr([12, 23, 1, 44, 233, 10, 9, 8, 0])
查看完整回答
反对 回复 2019-03-01
  • 2 回答
  • 0 关注
  • 512 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信