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

完全相同的逻辑在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)


梦里花落0921
浏览 513回答 2
2回答

阿波罗的战车

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])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python