python实现归并排序时,输出“[0, 0, 0, 0, 0, 0, 0, 0]”

问题遇到的现象和发生背景

python实现归并排序时 ,单独调用merge可以输出正确,但是sort、merge一起调用输出结果

[0, 0, 0, 0, 0, 0, 0, 0]

自学数据结构到归并排序,不知道哪里有错误

用代码块功能插入代码,请勿粘贴截图
import sys
sys.setrecursionlimit(100000) #例如这里设置为十万

def sort(arr,low,high):
    if low < high :
        mid = int((low+high)/2)
        sort(arr,low,mid)
        sort(arr,mid+1,high)
        merge(arr,low,mid,high)
    return arr


def merge(arr,low,mid,high):
    temp1 = [0]*len(arr)
    
    x = low
    y = mid + 1
    i = 0
    while xand yif arr[x] <= arr[y]:
            '''print(x)'''
            temp1[i] = arr[x]
            i += 1
            x += 1
        else:
            ''' print(y)'''
            temp1[i] = arr[y]
            i += 1
            y += 1
    while y<=high:
        temp1[i] = arr[y]
        i += 1
        y += 1

    while x<=mid:
        temp1[i] = arr[x]
        i += 1
        x += 1
    a = 0
    b = 0
    while a < len(arr):
        arr[a] = temp1[b]
        a += 1
        b += 1
    return arr
        


arr = [7,1,4,9,3,5,2,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)

print (sort(arr,low,high))

运行结果及报错内容

运行结果:[0, 0, 0, 0, 0, 0, 0, 0]

我的解答思路和尝试过的方法

def merge(arr,low,mid,high):
    temp1 = [0]*len(arr)
    
    x = low
    y = mid + 1
    i = 0
    while xand yif arr[x] <= arr[y]:
            '''print(x)'''
            temp1[i] = arr[x]
            i += 1
            x += 1
        else:
            ''' print(y)'''
            temp1[i] = arr[y]
            i += 1
            y += 1
    while y<=high:
        temp1[i] = arr[y]
        i += 1
        y += 1

    while x<=mid:
        temp1[i] = arr[x]
        i += 1
        x += 1
    a = 0
    b = 0
    while a < len(arr):
        arr[a] = temp1[b]
        a += 1
        b += 1
    return arr

arr = [1,4,7,9,2,3,5,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)

print (merge(arr,low,mid,high))
运行结果及报错内容

运行结果:[1, 2, 3, 4, 5, 8, 7, 9]

可参考博文:https://blog.csdn.net/qq_42589613/article/details/110431662


# -*- coding: utf-8 -*-
def merge(left, right):
    # 合并两个有序列表
    res = []
    while len(left) > 0 and len(right) > 0:
        if left[0] < right[0]:
            res.append(left.pop(0))
        else:
            res.append(right.pop(0))
    if left:
        res.extend(left)
    if right:
        res.extend(right)
    return res

def mergeSort(arr):
    # 归并函数
    n = len(arr)
    if n < 2:
        return arr
    middle = n // 2
    left = arr[:middle] # 取序列左边部分
    right = arr[middle:]# 取序列右边部分
    # 对左边部分序列递归调用归并函数
    left_sort = mergeSort(left)
    # 对右边部分序列递归调用归并函数
    right_sort = mergeSort(right)
    #
    return merge(left_sort, right_sort)
arr = [1,4,7,9,2,3,5,8]
a = mergeSort(arr)
print(a)