[GO] Python-Anfänger organisieren schnelle Sortierungen

Dies ist ein Memorandum

Ich werde es wirklich vergessen

Website zitieren

Dieses Mal möchte ich die Websites vorstellen, die ich besucht habe, um sie früher zu organisieren.

Die Algorithmen selbst unterscheiden sich geringfügig voneinander. Da es sich jedoch um die gleiche schnelle Sortierung handelt, werden sie basierend auf dem Algorithmus von @ muijp organisiert.

Programm

[@ Muijps schnelle Sortierung](https://qiita.com/muijp/items/257e8b9b49d891137d56#%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3% 82% BD% E3% 83% BC% E3% 83% 88-Quick-Sort) hat ein zufälliges Array-Programm und eine Ausgabe zum Debuggen, die neulich von @shiracamus empfohlen wurde.

q_sort.py


def qSort(a):
    print(a)#Zum Debuggen
    if len(a) in (0, 1):
        return a

    p = a[-1]
    l = [x for x in a[:-1] if x <= p]
    r = [x for x in a[:-1] if x >  p]

    return qSort(l) + [p] + qSort(r)
a = r.sample(range(1,11),k=9)
qSort(a)
#Ausgabe_____________________
[3, 7, 1, 6, 9, 8, 2, 10, 4]
[3, 1, 2]
[1]
[3]
[7, 6, 9, 8, 10]
[7, 6, 9, 8]
[7, 6]
[]
[7]
[9]
[]
>>[1, 2, 3, 4, 6, 7, 8, 9, 10]

Ja, das Programm ist zu kurz, um es zu verstehen.

Zerlegen und nachdenken

Das erste, was zu bemerken ist return qSort(l) + [p] + qSort(r) Ich denke, dass. Dies ist der Teil, in dem kleine Zahlen (Anordnung) und große Zahlen (Anordnung) rechts und links vom "Drehpunkt (interessierende Zelle)" platziert werden, was ein Merkmal der schnellen Sortierung ist.

Trace-Referenz Wenn Sie sich das GIF auf dieser Seite ansehen

  1. Nehmen Sie den mittleren Drehpunkt
  2. Vertauschen Sie die kleine Zahl links und die große Zahl rechts in der Reihenfolge von außen
  3. Ändern Sie den Scanbereich von Minimum zu Pivot und bringen Sie den Pivot in die Mitte Sie können sehen, dass sich das wiederholt.

In diesem Programm jedoch p = a[-1] As, den Drehpunkt auf die letzte Zahl bringen Und l = [x for x in a[:-1] if x <= p] r = [x for x in a[:-1] if x > p] Also habe ich es in eine Zahl unterteilt, die größer als der Pivot und eine Zahl kleiner als der Pivot ist, und sie mit "return" (Aufruf der Wiederholungsfunktion) verbunden.

Der Erste if len(a) in (0, 1): return a Gibt zurück, wenn die Anzahl der Zeichen eins oder weniger beträgt, wird sie als Rückgabewert der rekursiven Funktion zurückgegeben.

Rückverfolgung

Versuchen Sie auf der Grundlage der obigen Angaben, die oben angegebene Zufallszahl zu ermitteln

#Ausgabe_____________________
[3, 7, 1, 6, 9, 8, 2, 10, 4]
[3, 1, 2]
[1]
[3]
[7, 6, 9, 8, 10]
[7, 6, 9, 8]
[7, 6]
[]
[7]
[9]
[]
>>[1, 2, 3, 4, 6, 7, 8, 9, 10]

Sequenz [3, 7, 1, 6, 9, 8, 2, 10, 4] Pivot p = 4 Kleines Array l = {3,1,2} Großes Array r = {7,6,9,8,10} Und zerlegen image.png

Beleben Sie die kleine Sequenz wieder, p=2 l={1}、r={3} Und Demontage image.png Jeder wurde zerlegt, also bestätigen Sie

Wenn Sie die große Sequenz neu starten, ist diese Zeit p das Maximum bei 10, also l={7,6,9,8} 、r={} Ist zerlegt image.png Dann unterteilen Sie alle Zahlen image.png Wird als kombinierte Daten zurückgegeben image.png Es ist.

schließlich

Diesmal war es fast rund, aber mir wurde klar, dass ich es nicht verstand. Es war wirklich schön, eine solche Gelegenheit zu haben.

Recommended Posts

Python-Anfänger organisieren schnelle Sortierungen
Python-Anfänger organisieren Heap-Sortierungen
Python-Anfänger organisieren Blasensorten
Quicksort in Python
Anfänger üben Python
Python-Anfängernotiz
Python-Anfängerhandbuch (Funktionen)
Python-Anfänger berührt Pytorch (3)
Python Lehrbuch für Anfänger
Python Dictionary Anfängerhandbuch
Python-Anfänger berührt Pytorch (1)
Python-Anfänger berührt Pytorch (2)
Python-Anfängerhandbuch (Einführung)
OpenCV für Python-Anfänger
Organisieren Sie Typen in Python
Sortieren Sie schnell ein Array in Python 3
Lernablauf für Python-Anfänger
Python-Anfänger-Memorandum-Funktion
Python3-Umgebungskonstruktion (für Anfänger)
Organisieren Sie die Python-Entwicklungsumgebung
3 Gründe für die Programmierung Anfänger sollten mit Python beginnen
Python #Funktion 2 für Super-Anfänger
Python-Anfängerhandbuch (Variationen / Arrays)
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
Implementierung der schnellen Sortierung in Python
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Python
Python-Übungen für Anfänger # 2 [für Anweisung / while-Anweisung]
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Python #index für Super-Anfänger, Slices
Typisierungsautomatisierungsnotiz von Python-Anfängern
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Schnelle Sorte
Python #len Funktion für Super-Anfänger
Web Scraping für Anfänger in Python (1)
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
Führen Sie unittest in Python aus (für Anfänger)
Anfänger Memorandum Python "isdigit" Bewegung
Web Scraping für Anfänger in Python (4) -1
Python #Hello World für Super-Anfänger
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2
Python-Anfänger versuchten es herauszufinden
Lernen Sie die Grundlagen von Python ① Grundlegende Anfänger
INSERT in MySQL mit Python [Für Anfänger]
[Python] Protokoll des Studientreffens für Anfänger (7/15)
Antwort auf AtCoder Beginners Selection von Python3
[Episode 2] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 3] Anfänger haben Numeron AI mit Python ausprobiert
Memorandum von Python-Anfängern
Lassen Sie uns Python für Super-Anfänger zusammenstellen
[Episode 0] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 1] Anfänger haben Numeron AI mit Python ausprobiert
10 Python-Fehler, die Anfängern häufig sind
[Python] Bilder mit OpenCV lesen (für Anfänger)
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Organisieren Sie mit Python nach Ordnern getrennte Daten
WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger