简体   繁体   English

python中的递归合并排序

[英]recursive merge sort in python

I am trying to make merge sort using two functions in python. 我正在尝试使用python中的两个函数进行合并排序。 But I got an error like 但是我有一个错误
IndexError: list assignment index out of range whenever run my code. IndexError:只要运行我的代码, 列表分配索引就会超出范围 I don't know which part is wrong. 我不知道哪一部分错了。
This is my code below. 这是我的下面的代码。 Any help will appreciate!! 任何帮助将不胜感激!

def merge(A):

    def merge_sort(A,first,last):
        if first<last:
            mid=(first+last)//2
            merge_sort(A,first, mid)
            merge_sort(A,mid+1,last)

            temp=[]
            temp.append(99999)
            i=first
            j=mid+1
            k=0
            while i<=mid and j<=last:
                if A[i]<=A[j]:
                    temp[k]=A[i]
                    k=k+1
                    i=i+1
                else:
                    temp[k]=A[j]
                    k=k+1
                    j=j+1
            while i<=mid:
                temp[k]=A[i]
                k=k+1
                i=i+1
            while j<=last:
                temp[k]=A[j]
                k=k+1
                j=j+1
            a=0
            b=first
            while a<k:
                A[b]=temp[a]
                b=b+1
                a=a+1

    merge_sort(A,0,len(A)-1)

    return A

You can not assign a value to temp[k] as long as this element does not exist. 只要此元素不存在,就不能为temp[k]分配值。

Delete the row temp.append(99999) , replace every temp[k]=A[i] by temp.append(A[i]) and every temp[k]=A[j] by temp.append(A[j]) . 删除行temp.append(99999) ,将每个temp[k]=A[i] temp.append(A[i]) ,将每个temp[k]=A[j] temp.append(A[j])

You will end up with: 您最终将得到:

def merge(A):

    def merge_sort(A,first,last):
        if first<last:
            mid=(first+last)//2
            merge_sort(A,first, mid)
            merge_sort(A,mid+1,last)

            temp=[]
            i=first
            j=mid+1
            k=0
            while i<=mid and j<=last:
                if A[i]<=A[j]:
                    temp.append(A[i])
                    k=k+1
                    i=i+1
                else:
                    temp.append(A[j])
                    k=k+1
                    j=j+1
            while i<=mid:
                temp.append(A[i])
                k=k+1
                i=i+1
            while j<=last:
                temp.append(A[j])
                k=k+1
                j=j+1
            a=0
            b=first
            while a<k:
                A[b]=temp[a]
                b=b+1
                a=a+1

    merge_sort(A,0,len(A)-1)

    return A


A = [1,9,4,5]
print(A)
print(merge(A))

Output: 输出:

[1, 9, 4, 5]
[1, 4, 5, 9]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM