[PYTHON] Schnelle Sortierung | Größte Bestellung

Implementieren Sie eine schnelle Sortierung

Zunächst sei "26" die Standardnummer (Pivot). Gegenstände größer als "26" nach links Stellen Sie etwas kleiner als "26" nach rechts. Weil es in links und rechts unterteilt werden kann Die gleiche Verarbeitung wird für jede getrennte Liste durchgeführt. Left[32, 65, 76, 43, 87, 59] Right[13, 22, 14]

Als nächstes wird Links sortiert, aber der Drehpunkt ist die erste "32". Durch Wiederholen dieses Vorgangs wird das folgende Ergebnis erhalten.

QuickSort.py


data = [26,13,32,65,76,22,43,87,14,59]

def QuickSort(data):
    if len(data) <= 1: #Wenn weniger als eine Daten vorhanden sind, wird der Wert unverändert zurückgegeben
        return data

    #Verwenden Sie den ersten Wert in der Liste als Referenzdaten (Pivot).
    pivot = data[0]
    left, right, same = [], [], 0 #Initialisierung (Liste, Liste, 0)

    for ii in data:
        if ii > pivot:
            left.append(ii)  #Wenn größer als der Drehpunkt, nach links stellen
        elif ii < pivot:
            right.append(ii) #Wenn kleiner als der Drehpunkt, rechts einstellen
        else:
            same += 1        #Verschieben Sie nicht den gleichen Wert, sondern zählen Sie nur die Zahl

    left  = QuickSort(left)  #Links sortieren
    right = QuickSort(right) #Rechts sortieren
    #Sortierte Daten zurückgeben und zusammen schwenken
    return left + [pivot] * same + right

print(QuickSort(data))

#Ergebnis
# [87, 76, 65, 59, 43, 32, 26, 22, 14, 13]

Es scheint eine Möglichkeit zu geben, "Teilungsregel" zu sagen, aber die Teilung wird in kleinen Einheiten wiederholt und der Vorgang wird rekursiv wiederholt. Abhängig davon, wie Sie den Pivot auswählen, scheint es verschiedene Dinge zu geben, die schneller verarbeitet werden können.

Recommended Posts

Schnelle Sortierung | Größte Bestellung
Schnelle Sorte