2016-06-16 3 views
0

Ich versuche, meinen ersten schnellen Sortieralgorithmus für Stunden zu schreiben, aber immer noch nicht richtig. Das Ziel besteht darin, einen schnellen Sortiercode zum Sortieren eines Arrays zu schreiben. Ich möchte zwei Funktionen verwenden: rekursive Funktion quick_sort und Partitionsfunktion.Schnelle Sortierung funktioniert nicht nach der ersten Partition

Ich fand die Partitionsfunktion scheint korrekt auf jedem Sub-Array von der Division und Eroberung erzeugt, aber das zurückgegebene Gesamt-Array schien nicht nach der ersten Partition geändert (die erste Partition hat einen Effekt, während die zweite, dritte Partitionen , ..., schien keine Wirkung zu haben).

Ich muss hier etwas verpasst haben, irgendwelche Hinweise?

def partition(a, first, last):  
    x = a[0] 
    j = 0 

    for i in range((first+1), (last+1)): 

     if x >= a[i]: 
      j = j + 1 
      a[i], a[j] = a[j], a[i]  
    a[0], a[j] = a[j], a[0] 

    return j 

def quicksort(a): 
    quick_sort(a, 0, len(a) - 1) 

def quick_sort(a, first, last): 

    if first < last:  
     j = partition(a, first, last) 
     # devide a into two parts and do quicksort respectively 
     quicksort(a[:j]) 
     quicksort(a[j+1:]) 

    return a 

a = [6.5, 4, 2, 3, 9, 8, 9, 4, 7, 6, 1] 
quicksort(a) 
+1

ein [: j] ist anders Array, a Kopieren. Du solltest Quicksort (a, first, j), quicksort (a, j + 1, last) verwenden – UmNyobe

+0

Das ist genau, wo ich verpasst habe! Vielen Dank UmNyobe – enaJ

Antwort

2

Ersetzen Sie diese

quicksort(a[:j]) 
quicksort(a[j+1:]) 

Für

quick_sort(a,first,j-1) 
quick_sort(a,j+1,last) 

Da Sie quicksort(a) fordern diese willl wieder tun nur die erste Iteration, bc Sie die niedrigen und hohen als die erste Iteration alle eingestellt die Zeit, also um sie zu erhalten, sollten Sie die rekursive mit j

Verwandte Themen