我在执行归并排序时出错了吗?

Mistake in my implementation of merge sort?

这是我对归并排序的实现

    lis=list()
    lis=[9,0,5,1,8,3,7,2,6,4]

    def merge(lis,l,m,r):
        i=l
        j=m
        n1=m-1-l
        n2=r-m
        temp=list()
        while(i<=n1 and j<=n2):
            if(lis[i]<lis[j]):
                temp.append(lis[i])
                i+=1
            else:
                temp.append(lis[j])
                j+=1
        while(i<=n1):
            temp.append(lis[i])
            i+=1
        while(j<=n2):
            temp.append(lis[j])
            j+=1
        for k in range(len(temp)):
            lis[l+k]=temp[k]

    def mergesort(lis,l,r):
        if(l<r):
            m=(l+r)//2
            mergesort(lis,l,m)
            mergesort(lis,m+1,r)
            merge(lis,l,m,r)

    mergesort(lis,0,9)
    print(lis)

这是输出:[0, 5, 8, 3, 9, 1, 7, 2, 6, 4] 确实对一些递归进行了排序,但 hen bonks to death 数学使用有问题请帮忙

无法弄清楚我的代码有什么问题

这里是固定整洁的版本-

def merge(lis, l, m, r):
    n1 = m - l + 1
    n2 = r- m

    L = [0] * (n1)
    R = [0] * (n2)

    for i in range(0 , n1):
        L[i] = lis[l + i]

    for j in range(0 , n2):
        R[j] = lis[m + 1 + j]

    i,j,k=0,0,l

    while i < n1 and j < n2 :
        if L[i] <= R[j]:
            lis[k] = L[i]
            i += 1
        else:
            lis[k] = R[j]
            j += 1
        k += 1

    while i < n1:
        lis[k] = L[i]
        i += 1
        k += 1

    while j < n2:
        lis[k] = R[j]
        j += 1
        k += 1

def mergesort(lis,l,r):
    if l < r:
        m = (l+(r-1))//2
        mergesort(lis, l, m)
        mergesort(lis, m+1, r)
        merge(lis, l, m, r)

lis=[9,0,5,1,8,3,7,2,6,4]
mergesort(lis,0,len(lis)-1)
print(lis)

这是你犯的最严重的错误。

m=(l+r)//2 应该是 m=(l+r)//2

做到了

    '''
    n=int(input("Enter number of elements: "))
    lis=list()
    for i in range(n):
        lis.append(int(input("Enter element "+str(i+1)+": ")))
    '''
    lis=list()
    lis=[9,0,5,1,8,3,7,2,6,4]

    def merge(lis, l,m,r):
        i,j=l,m+1
        n1,n2=m,r
        srt=list()
        while(i<=n1 and j<=n2):
            if(lis[i]<lis[j]):
                srt.append(lis[i])
                i+=1
            else:
                srt.append(lis[j])
                j+=1
        while (i<=n1):
            srt.append(lis[i])
            i+=1
        while (j<=n1):
            srt.append(lis[j])
            j+=1
        m=l
        for k in srt:
            lis[m]=k
            m+=1

    def mergesort(lis,l,r):
        if(l<r):
            m=(l+r)//2
            mergesort(lis,l,m)
            mergesort(lis,m+1,r)
            merge(lis,l,m,r)

    mergesort(lis,0,9)
    print(lis)