Drehen Sie die Elemente (Referenz) und platzieren Sie die verbleibenden Elemente hin und her, je nachdem, ob sie größer oder kleiner als der Drehpunkt sind.
Die Arbeit, den Drehpunkt zu bestimmen und die vorher und nachher angeordneten Elemente anzuordnen, wird wiederholt.
Bestätigen Sie, wann die Elemente eins werden.
python
##Geben Sie den Drehpunkt und links + Drehpunkt an+Eine Funktion (schnell), die ein auf der rechten Seite sortiertes Array erstellt_sort)
def quick_sort(arr):
#Die Sortierung endet, wenn nur ein Element vorhanden ist (eine Sortierung ist nicht erforderlich, wenn weniger als zwei Elemente vorhanden sind).
if len(arr) <= 1 :
return arr
#Geben Sie den Wert von Pivot an
p = arr[0]
#Führt den Teilungsprozess basierend auf dem Drehpunkt durch. div Funktion
arr1, arr2 = div(p, arr[1:])
#Kombinieren Sie die geteilten Arrays mit Bezug auf den Pivot.
#Schnell auf das geteilte Array selbst_Führen Sie eine Sortierung durch.
return quick_sort(arr1) + [p] + quick_sort(arr2)
##Eine Funktion, die basierend auf dem Pivot linke und rechte Arrays erstellt(div)
def div(p, arr):
#Definieren Sie eine Variable, um das linke und das rechte Pivot-Array zu platzieren
left, right=[], []
for i in arr:
#Auf der linken Seite aufbewahren, wenn es kleiner als der Drehpunkt ist
if i < p:
left.append(i)
#Wenn es sich über dem Drehpunkt befindet, lagern Sie es auf der rechten Seite
else:
right.append(i)
#Linke und rechte Arrays ausgeben
return left, right
Es ist intuitiver und einfacher zu verstehen als das Zusammenführen von Sortierungen.
- Vorsicht Wenn der Wert ganz links auf Pivot eingestellt ist, erhöht sich der Rechenaufwand, wenn die Werte bereits in absteigender Reihenfolge angeordnet sind.
Aus diesem Grund wird empfohlen, den Pivot zufällig zu bestimmen.
Ändern Sie den Drehpunkt der obigen Funktion quick_sort wie folgt.
python
import numpy as np
p = random.choice(arr)
quick_sort
import numpy as np
def quick_sort2(arr):
#Die Sortierung endet, wenn nur ein Element vorhanden ist (eine Sortierung ist nicht erforderlich, wenn weniger als zwei Elemente vorhanden sind).
if len(arr) <= 1 :
return arr
#Geben Sie den Wert von Pivot an
p = random.choice(arr)
#Führt den Teilungsprozess basierend auf dem Drehpunkt durch. div Funktion
arr1, arr2 = div(p, arr[1:])
#Kombinieren Sie die geteilten Arrays mit Bezug auf den Pivot.
#Schnell auf das geteilte Array selbst_Führen Sie eine Sortierung durch.
return quick_sort(arr1) + [p] + quick_sort(arr2)