Szybkie sort Python

Szybkie sort Python
Quicksort to często lubiany algorytm sortowania, który jest często używany. W pierwszej połowie tego postu użyjemy prostych liczb całkowitych, ale pokażemy, jak dostosować tę technikę do sortowania obiektów klasy niestandardowej. Quicksort reprezentuje algorytmy podziału i koniunktury, na miejscu i niestabilne sortowanie. Przed rekurencyjnym sortowaniem większych tablic podziel i podbij się dzielą tablicę na krótsze tablice, aż znajdzie pustą tablicę, nawet jeden z jednym wpisem. Tablica lub dowolne podmiejskie nie są powielane, gdy są używane na miejscu. Jednak wszystkie rekurencyjne wywołania, które powoduje, że wymagają pamięci stosu. Niestabilny algorytm sortowania tego nie gwarantuje; może się zdarzyć, ale nie jest to gwarantowane. Jest to głównie istotne podczas sortowania obiektów, a nie prymitywnych rodzajów.

Przykład 1:

Zaczynamy od wybrania elementu obrotowego. Następnie, aby zapętlić wszystkie elementy na liście, używamy Pythona do pętli. Jeśli liczba jest <= to the pivot, it is shifted to the left. Otherwise, it shifts to the right side of the pivot. Our Python program returns the new high value. Item + 1 equals the new high value. After that, we must execute our algorithm. A separate procedure can be created to achieve this. This function compares the values of “low_point” and “high_point” to test if “low_pont” is less than “high_point.” We'll be likely to progress if that's the case. Otherwise, our sorting will come to a halt. When our sorting comes to a halt, it signifies the list has been sorted.

Metoda PREPE () jest następnie wywoływana przez nasz kod. To lokalizuje wskaźnik obrotowy i przenosi rzeczy do odpowiednich lokalizacji. Metoda Quicksort () jest zatem dwukrotnie nazywana przez nasz program. Po raz pierwszy używamy Quicksort na kawałkach po lewej stronie obrotu. Do drugiej próby używamy Quicksort na obiektach po prawej stronie. W rezultacie, ponieważ się wywołuje, nasza funkcja jest rekurencyjna. Utwórzmy teraz podstawowy program, który tworzy listę sortowalną. Zaczynamy od określania zestawu wartości do sortowania. Funkcja Python len () służy do określenia długości naszego zestawu atrybutów. Następnie stosuje się metodę Quicksort ().

def przygotuj (dane, Low_Point, High_Point):
PIVOT = dane [High_Point]
n = Low_Point - 1
Dla i w zakresie (Low_Point, High_Point):
Jeśli dane [i] <= pivot:
n = n + 1
(dane [n], dane [i]) = (dane [i], dane [n])
(Data [n + 1], dane [High_Point]) = (Data [High_Point], Data [n + 1])
zwrócić n + 1
def Quick_Sort (dane, Low_Point, High_Point):
Jeśli Low_PointPIVOT = Przygotuj (dane, Low_Point, High_Point)
Quick_Sort (Data, Low_Point, Pivot - 1)
Quick_Sort (dane, Pivot + 1, High_Point)
my_list = [9, 5, 1, 7, 4, 2]
Total = len (my_list)
Quick_Sort (my_list, 0, ogółem - 1)
Drukuj (my_list)

Tutaj możesz zobaczyć, że dane są sortowane.

Przykład 2:

W tym przykładzie użyjemy dwóch funkcji: parition () i QuickSort (). Funkcja Quicksort () najpierw kolekcja, a następnie wywołuje rekurencyjnie na partycjonowanych utworach. Najpierw spójrzmy na funkcję Division (). Pivot został ustalony na pierwszym miejscu, jak widać w kodzie. Jeśli wartość, którą teraz oglądamy, jest wyższa niż obrot. Możemy przejść do następnego kawałka po lewej, ponieważ jest on po prawej stronie obrotu. Musimy również upewnić się, że nie minęliśmy niskiego wskaźnika, co wskazuje, że wszystkie elementy zostały przeniesione na właściwą stronę obrotu. Następnie przeprowadzana jest metoda przeciwna do powyższego. Znaleźliśmy liczbę pozarządową zarówno dla High_Point, jak i Low_Point, albo Low_Point jest większy niż High_Point, w którym to przypadku opuścimy pętlę. Na koniec załóżmy kod Quicksort (). Możemy użyć Quicksort () w podstawowej tablicy do wdrożenia obu funkcji (partycja i QuickSort).

def PARTITION (ARR1, Start, End):
Pivot = arr1 [start]
Low_point = start + 1
high_point = koniec
Choć prawda:
podczas gdy Low_Point = obrotowy:
high_point = high_point - 1
podczas gdy Low_Point<= high_point and arr1[low_point] <= pivot:
Low_Point = Low_Point + 1
Jeśli Low_Point = End:
powrót
p_func = partycja (ARR1, start, koniec)
Quick_Sort (ARR1, start, p_func-1)
Quick_Sort (ARR1, P_Func+1, End)
ARR1 = [23 22,56,4,26,77,10,33,44,12 57,78,22,83,43,31,98,76]
Quick_Sort (ARR1, 0, Len (ARR1) - 1)
Drukuj (ARR1)

To jest wynik. Nie ma gwarancji, że te dwa 22 -letnie były w tej kolejności, ponieważ metoda jest niestabilna. Może na początku zostały zmienione, ale to nie oznacza niczego w tablicy całkowitej.

Przykład 3:

W tym przykładzie sortujemy niestandardowe obiekty. Istnieje kilka różnych sposobów rozszerzenia tego algorytmu w celu sortowania niestandardowych obiektów w Pythonie. Operatorzy porównawcze dla określonej klasy mogą zostać zaimplementowani w stylu pytalniczym, co oznacza, że ​​nie musielibyśmy zmieniać algorytmu, ponieważ>, ==, =, itp., działałby najlepiej w naszym obiekcie klasowym. Jeszcze jedną opcją jest, aby dzwoniący dostarczył nasz algorytm metodę, która następnie zostałaby wykorzystana do wykonania faktycznego porównania przedmiotów. Jest dość proste do przepisywania algorytmu do użycia za pomocą obiektów na zamówienie. Pamiętaj jednak, że algorytm nie jest całkowicie stabilny. Zacznijmy od klasy uczniów. Ta klasa ma tylko dwie cechy: imię i imię ucznia. Sortujemy wiek, co osiągniemy, podając algorytm sortowania nowej funkcji Lambda. Ale najpierw przyjrzyjmy się, w jaki sposób ta funkcja jest używana w algorytmie. Zamiast używać operatorów = lub> = do dokonania bezpośredniego porównania, używamy funkcji, aby ustalić, który uczeń jest starszy. Lambda przesyła obiekt w porównaniu do wywołania szybkiego sortowania, które dokonuje dokładnego porównania atrybutów wieku.

Uczeń klasy:
def __init __ (self, name_of_student, wiek):
samego siebie.name_of_student = name_of_student
samego siebie.Wiek = wiek
def __str __ (jaźń):
powrót do siebie.imię ucznia
DEF PARTITION (ARR1, Start, End, Compare_Func):
Pivot = arr1 [start]
Low_point = start + 1
high_point = koniec
Choć prawda:
podczas gdy Low_Point<= high_point and compare_func(arr1[high_point], pivot):
high_point = high_point - 1
podczas gdy Low_Point<= high_point and not compare_func(arr1[low_point], pivot):
Low_Point = Low_Point + 1
Jeśli Low_Point = End:
powrót

Tutaj możesz zobaczyć posortowaną listę nazwisk.

Wniosek:

Tablica jest podzielona za pomocą algorytmu Python Quicksort, a następnie sortuje każdy wpis na liście; Ta metoda wielokrotnie wywołuje te tablice. Przeszliśmy tę koncepcję dogłębnie z przykładami w tym artykule.