Einordnung ist traditionell eine schwierige Aufgabe in der Informatik. Die Wahl eines Sortier -Algorithmus, der effizient und schnell ist, kann schwierig sein. Oft beinhaltet effizienten Algorithmus Wahl Kenntnis der Daten , die sortiert und spezialisierte Arten arbeiten in der Regel viel besser als generalisierte Sortieralgorithmen . Allerdings werden bestimmte Arten , wie der " Merge sort , " kann in allgemeiner Situationen durch den Abbau Sätze und Sortierung kleinere Stücke rekursiv arbeiten. Die Liste
Eine Zusammenführung ist eine Art "Teile und Herrsche "-Algorithmus , dass es dauert, Teile der Listen und kontinuierlich bricht sie in zwei Hälften bis zum Erreichen der einzelnen Elemente der Liste , die dann in zusammengeführt Reihenfolge. Zum Beispiel mit einer numerischen Liste wie
5 6 2 4 1 9 8 3 7
Sortieren einer Liste , wie dies mit einem Merge sort benötigen Halbierung der Liste Größe wiederholt , bis jeder beginnen Basisanzahl existiert allein. Dann kann die Art vergleichen die Zahlen und setze sie zusammen in der richtigen Reihenfolge (vom niedrigsten zum höchsten, in diesem Fall).
Die Merge -Methode
der Merge-Methode einfach:
def Merge (erste, zweite )
Einnahme von zwei Listen , die Methode sie miteinander verschmelzen , indem Sie am Anfang jeder Liste. Es hängt dann die nächste geringsten jeder Liste in eine neue Liste. Das Ergebnis ist eine sortierte Liste. ( Denken Sie daran, richtig einfügen Registerkarte Leerzeichen nach dem "while" und " if /else "-Anweisungen . ):
Während i < len ( zuerst) und j < len (Zweiter):
< p> wenn erste [i] <= zweite [j] :
new_list.append ( erste [i])
i = i + 1
anderes:
new_list.append ( zweite [j])
j = j + 1}
Endlich, nach einer Liste Enden , die restlichen Werte sind in der neuen Liste gesetzt :
new_list + = first [i: ]
new_list + = zweite [j : ]
Rückkehr END_LIST
Merge Sort AGB
Der eigentliche Merge sort treibt die wichtigsten Sortieralgorithmus . Es gibt zwei wesentliche Funktionsteile : die bedingte Aspekt, der die Rekursion einmal die Listen unterteilt sind und die eigentliche Rekursion , die die Listen halbiert stoppt . Die Haltbedingung kommt zuerst :
def mergesort (Liste) :
if len (Liste) == 1 :
Rückgabeliste
dafür sorgt, dass wenn ein sub Liste erreicht nur ein Element , das Element in Reihenfolge zurückgegeben wird es mit den anderen Zahlen zusammengeführt werden sollen .
Merge Sort Recursion
die zweite Hälfte des die Art ist die Rekursion. Im Anschluss an die " if"-Anweisung /bedingte , wie folgt:
anderes:
Mitte = len (Liste) /2
start = mergesort ( Liste [ Mitte: ] )
end = mergesort ( Liste [: Mitte ] )
Rückkehr Merge (Beginn, Ende )
Wegen der Rekursion , nachdem die Listen in einzelne Elemente sind gebrochen , der Algorithmus zurück verfolgt bis auf die zuletzt ausgeführte Verfahren . Also, durch die Zeit, die Aussage " Rückkehr Merge (Beginn, Ende ) " ausführt , kehrt der Algorithmus eine zusammengeführte , sortierte Liste von zwei bisher zusammengeführt , sortierte Listen von kleinerer Größe .