合并排序Python实现?实施中有什么问题

时间:2018-11-25 08:39:28

标签: python python-3.x algorithm mergesort

[在此处输入图片描述] [1]

[1]:https://i.stack.imgur.com/JNtR5.png 强文本

此代码无法正常工作。这段代码有什么问题?如何解决?

       a=[2,5,8,7,1,9,6]
n=len(a)
temp=[0]*(n+1)
def mergesort(a,low,high):
    if low < high:
        mid=(low+high)/2
        mergesort(a,low,mid)
        mergesort(a,mid+1,high)
        combine(a,low,mid,high)
    print(a)    

def combine(a,low,mid,high):
    k=low
    i=low
    j=mid+1
    while i<=mid and j<=high:
        if a[i]<=a[j]:
            temp[k]=a[i]
            k=k+1
            i=i+1
        else:
            temp[k]=a[j]
            k+=1
            j+=1    
    while i<=mid:
        temp[k]=a[i]
        i+=1
        k+=1        
    while j<=high:
        temp[k]=a[j]
        j+=1
        k+=1
print('lets sort the array')
mergesort(a,0,n)  

1 个答案:

答案 0 :(得分:0)

在全球范围内,存在两个问题:n=len(a)导致IndexError(分别更改为n=len(a)-1),并且您忘记了从temp复制到原始数组(将以下代码添加到combine例程的结尾:

for t in range(low, high+1):
    a[t] = temp[t]