2016-11-05 10 views
0

Ich versuche Merge Sort mit zwei Funktionen in Python zu machen. Aber ich habe einen Fehler wie
IndexError: Liste Zuordnungsindex außerhalb des Bereichs wann immer meinen Code ausführen. Ich weiß nicht, welcher Teil falsch ist.
Dies ist mein Code unten. Jede Hilfe wird zu schätzen wissen !!rekursive Merge Sortierung in 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

in der Regel die volle Fehler-Stack die Zeilennummer liefert, wo der Fehler/Ausnahme auftritt, können Sie vielleicht, dass teilen, oder es könnte Sie erhalten sogar die Antwort, nach der Sie suchen. zusätzlich "IndexError: Liste Zuordnungsindex außerhalb des Bereichs" sollte Ihnen eine ziemlich gute Idee geben, wo Sie suchen müssen ... – glls

Antwort

1

Sie können keinen Wert temp[k] solange zuweisen wie dieses Element nicht existiert.

Löschen Sie die Zeile temp.append(99999), ersetzen jedes temp[k]=A[i] von temp.append(A[i]) und jeder temp[k]=A[j] von temp.append(A[j]).

Sie mit am Ende wird:

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

Ausgang:

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

Vielen Dank !! es funktioniert endlich !! –

+0

Sie können die Antwort akzeptieren, wenn es für Sie nützlich ist. – maij