Python 我实现合并排序时出错了吗?

Python 我实现合并排序时出错了吗?,python,mergesort,Python,Mergesort,下面是我对合并排序的实现 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]): t

下面是我对合并排序的实现

    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)
lis=list()
lis=[9,0,5,1,8,3,7,2,6,4]
def合并(lis、l、m、r):
i=l
j=m
n1=m-1-l
n2=r-m
temp=list()

而(i在这里,它是固定和整洁的版本-

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)
def合并(lis、l、m、r):
n1=m-l+1
n2=r-m
L=[0]*(n1)
R=[0]*(n2)
对于范围(0,n1)内的i:
L[i]=lis[L+i]
对于范围(0,n2)内的j:
R[j]=lis[m+1+j]
i、 j,k=0,0,l
当i如果L[i]在这里,它是固定且整洁的版本-

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)
def合并(lis、l、m、r):
n1=m-l+1
n2=r-m
L=[0]*(n1)
R=[0]*(n2)
对于范围(0,n1)内的i:
L[i]=lis[L+i]
对于范围(0,n2)内的j:
R[j]=lis[m+1+j]
i、 j,k=0,0,l
当i
    '''
    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)
“”
n=int(输入(“输入元素数:”)
lis=列表()
对于范围(n)中的i:
lis.append(int(输入(“输入元素”+str(i+1)+“:”))
'''
lis=列表()
lis=[9,0,5,1,8,3,7,2,6,4]
def合并(lis、l、m、r):
i、 j=l,m+1
n1,n2=m,r
srt=list()
而(我在这里做的

    '''
    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)
“”
n=int(输入(“输入元素数:”)
lis=列表()
对于范围(n)中的i:
lis.append(int(输入(“输入元素”+str(i+1)+“:”))
'''
lis=列表()
lis=[9,0,5,1,8,3,7,2,6,4]
def合并(lis、l、m、r):
i、 j=l,m+1
n1,n2=m,r
srt=list()

虽然(iyes做了那件事仍然没有Sorty做了那件事仍然没有Sortp请不要粘贴Geeksforgeks的代码,我想知道我自己的错误请不要粘贴Geeksforgeks的代码,我想知道我自己的错误看起来像是你修复了你的代码。唯一的挑战是你如何设置I、j、n1和n2值。第一个子数组必须是从l到m,第二个子数组d子数组必须从m+1到r。换句话说,i到n1,j到n2。很好,你能够自己修复它。你很荣幸。看起来你修复了你的代码。唯一的挑战是如何设置i,j,n1和n2值。第一个子数组必须从l到m,第二个子数组必须从m+1到r。换句话说,i到n1,j到n2。开始你自己能修好,真是太好了。