Letztes Mal Frage zum Ermitteln des Maximalwerts ** für einen bestimmten Wert als bedingte Suche (Es gibt eine Antwort, aber (Schweiß) wird in Python untersucht Ich habe es später geschrieben, aber dieses Mal wird *** sort *** erklärt und C ++ - Code geschrieben. Ich dachte, es sei Python wie gewohnt, aber ich konnte es nicht selbst reparieren, es wurde von Google gepostet Als Memorandum zu dem Code, der ist.
int compareFunc(const void * voidA, const void * voidB) {
int * intA = (int *)(voidA);
int * intB = (int *)(voidB);
return *intA - *intB;
}
const int ARRAY_SIZE = 10;
int intArray[ARRAY_SIZE] = {87,28,100,78,84,98,75,70,81,68};
qsort(intArray, ARRAY_SIZE, sizeof(int), compareFunc);
Es wurde mit der qsort-Funktion implementiert.
Referenzseite → Schnellsortierung
test35.py
#!/usr/bin/env python
#coding:utf-8
def quicksort(seq):
if len(seq) < 1: #Gibt sich selbst zurück, wenn die angegebene seq-Sequenz kleiner als eins ist
return seq
pivot = seq[0] #seq Array zum Schwenken[0]Ersetzen Sie das th * Wenn es rekursiv ist, wird das am weitesten links stehende Array th dem Pivot zugewiesen
left = [] #linke Anordnung "Ich frage mich, ob das Verständnis hier anders ist", um mehr und mehr zu akkumulieren
right = [] #rechtes Array gleich
for x in range(1, len(seq)): #Wiederholen Sie dies für die Länge von 1 ohne 0 in der folgenden Sequenz
if seq[x] <= pivot: #Erste Sequenz[1]Ist kleiner als Pivot?
left.append(seq[x]) #Wenn es klein ist, speichern Sie es im rechten linken Array des Arrays in der Mitte des Pivots
else:
right.append(seq[x]) #Wenn es groß ist, speichern Sie es im linken rechten Array des Arrays in der Mitte des Pivots.
left = quicksort(left) ###Zuweisen des gespeicherten linken Arrays zur linken Variablen
right = quicksort(right) ###Das gleiche wie oben
foo = [pivot] ###* Das Problem ist hier, aber Pivot ist ein Array, das rekursiv aufgerufen wird.[0]Da es der zweite Wert ist, ist es eine Sammlung davon? ??
return left + foo + right
seq = [87,28,100,78,84,98,75,70,81,68]
mx = quicksort(seq)
print(mx)
・ ・ ・(Ergebnis der Terminalausführung)
>>> from test35 import quicksort
[28, 68, 70, 75, 78, 81, 84, 87, 98, 100]
>>>
Da es zu schwer zu verstehen war, werde ich das Innere mit einer print-Anweisung im Pivot-Zuweisungsteil überprüfen, den *** Rückgabeteil *** ändern, ihn ausführen und überprüfen, was zurückgegeben wird
test35.py
#!/usr/bin/env python
#coding:utf-8
def quicksort(seq):
if len(seq) < 1:
return seq
pivot = seq[0]
print(pivot)
left = []
right = []
for x in range(1, len(seq)):
if seq[x] <= pivot:
left.append(seq[x])
else:
right.append(seq[x])
left = quicksort(left)
right = quicksort(right)
foo = [pivot]
#return left + foo + right
return left
seq = [87,28,100,78,84,98,75,70,81,68]
mx = quicksort(seq)
print(mx)
・ ・ ・(Ausführungsergebnis)
>>> from test35 import quicksort
87
28
78
75
70
68
84
81
100
98
[]
>>>
Ja, warum? ?? Ich bin sicher, ich speichere es nicht auf der linken Seite[87,28,100 ...]Und so weiter
Ich habe es erwartet. Das Pivot-Teil wird zuerst gedruckt, aber ich kann es irgendwie verstehen.
Pivot ist von der angegebenen Reihenfolge[0]Da das zweite Element zugewiesen ist, wird es so ausgegeben, wie es ist.
Ich fand das seltsam und habe versucht, mit return foo + right zu wechseln, aber Nur Ergebnisse
・ ・ ・(Ausführungsergebnis)
>>> from test35 import quicksort
[87, 100]
>>>
Oh, vielleicht ist die zuletzt angegebene Sequenz zurück? Was ist Pivot? Geheimnis ist.
Schließlich, wenn ich mit return foo versuche, Nur Ergebnisse
>>> from test35 import quicksort
[87]
>>>
Ja, nach all der zuletzt angegebenen Sequenz[0]Nur das zweite Element wird zurückgegeben.
Dies wurde auf der Referenzseite so erklärt.
Dies ist ein Implementierungsbeispiel für die Anordnung der Liste in aufsteigender Reihenfolge. Der Pivot ist das erste Element der Liste, die Elemente mit niedrigeren Werten werden in der linken Liste gespeichert, die Elemente mit höheren Werten werden in der rechten Liste gespeichert und die Liste wird schließlich um den Pivot kombiniert.
Ich habe das Ausgabeergebnis so verstanden, wie es im Kommentar empfohlen wurde. Es tut mir leid für alle Fragen.