2016-11-05 414 views
0

我想在python中使用兩個函數進行合併排序。但我得到了一個錯誤,如
IndexError:列表分配索引超出範圍每當運行我的代碼。我不知道哪部分是錯的。
這是我的代碼如下。 任何幫助將感激!遞歸合併排序python

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 
+1

通常完整的錯誤堆棧提供了其中的錯誤/異常發生的行號,也許你可以共享,或者它可能甚至爲您提供您正在尋找的答案。另外「IndexError:列表分配索引超出範圍」應該給你一個相當不錯的主意,看看哪裏... – glls

回答

1

只要此元素不存在,就不能爲temp[k]賦值。

刪除行temp.append(99999),通過temp.append(A[j])更換每temp[k]=A[i]通過temp.append(A[i])temp[k]=A[j]

您將結束:

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)) 

輸出:

[1, 9, 4, 5] 
[1, 4, 5, 9] 
+0

謝謝!它終於起作用了! –

+0

如果對您有用,您可以接受該答案。 – maij