Aus einem Buch, das Programmierer lernen können ... (Python): Über das Sortieren

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.

Problem: Schnelle Sortierung C ++ - Antwortcode
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.

Self (geliehener Code) Python, das das angegebene Array sortiert und durch schnelles Sortieren zurückgibt

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

Nur nach links zurückkehren

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.

Recommended Posts

Aus einem Buch, das Programmierer lernen können ... (Python): Über das Sortieren
Aus einem Buch, das Programmierer lernen können ... (Python): Zeiger
Aus einem Buch, das Programmierer lernen können (Python): Nachrichten dekodieren
Aus einem Buch, das der Programmierer lernen kann ... (Python): Finden Sie den häufigsten Wert
Aus einem Buch, das Programmierer lernen können ... (Python): Überprüfung von Arrays
Aus einem Buch, das Programmierer lernen können (Python): Statistischer Verarbeitungsabweichungswert
Aus einem Buch, das der Programmierer lernen kann ... (Python): Bedingte Suche (Maximalwert)
Aus einem Buch, das Programmierer lernen können (Python): Klassendeklaration (öffentlich / privat usw.)
Aus einem Buch, in dem die Gedanken des Programmierers gelernt werden können: Fassen Sie die Teile kleiner Probleme zusammen
Aus einem Buch, das der Programmierer lernen kann ... Überprüfung der Runenprüfsumme (feste Länge)
Aus einem Buch, das der Programmierer lernen kann ... Überprüfung der Runenprüfsumme (variable Länge) Teil 2
Aus einem Buch, das der Programmierer lernen kann ... Konvertieren von Zeichen, die Zahlen darstellen, in einen ganzzahligen Typ
Aus einem Buch, das die Denkweise des Programmierers interessanterweise gelernt hat (Python)
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
Versuchen Sie es mit APSW, einer Python-Bibliothek, die SQLite ernst nehmen kann
"Python Kit", das Python-Skripte von Swift aufruft
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Die Denkweise des Programmierers stammt aus dem XX. Buch (Python)
"Ein Buch, das Flask von Grund auf versteht" Memo lesen
Die Denkweise des Programmierers stammt aus dem XX. Buch (Python)
Ein Mechanismus zum Aufrufen von Ruby-Methoden aus Python, der in 200 Zeilen ausgeführt werden kann
Ein Memo, das mit Python & Spark Daten aus dashDB liest
Python-Programm von "Buch, das schwieriges Programmieren leicht lehrt"
Python-Bedingungsextraktion aus der Liste, die ich oft vergesse
Memorandum über Korrelation [Python]
Ein Memorandum über den Python-Mock
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
Ein Hinweis zu [Python] __debug__
[Python] Erstellen Sie ein Diagramm, das mit Plotly verschoben werden kann
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Lassen Sie uns ein Kindle-Buch erstellen, das mathematische Formeln aus TeX-Dateien visualisiert
Erstellt eine Bibliothek für Python, die die morphologische Teilung problemlos handhaben kann
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
[Python-Algorithmus] Ein Programm, das einige deutsche Antworten aus einer Suche mit Tiefenpriorität ausgibt
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Berühren Sie Python-Objekte in Elixir
Python: Ein Hinweis zu Klasse 1 "Abstract"
Über Python, aus und importieren, als
Python / Machen Sie ein Diktat aus einer Liste.
Ein Hinweis zu Mock (Python-Mock-Bibliothek)
Ich habe eine generische Python-Projektvorlage erstellt
[Python] Ein Programm, das ein Paar findet, das durch einen bestimmten Wert geteilt werden kann
Extrahieren Sie mit Python Zeilen, die den Bedingungen entsprechen, aus einer Textdatei
Über "spleeter", der Gesang und Musikinstrumente von Musikdaten trennen kann
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe einen einfachen Timer erstellt, der vom Terminal aus gestartet werden kann
Erstellen Sie eine virtuelle Python-Umgebung, die jeder im September 2016 verstehen kann (pyenv + virutalenv).
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
[Python] Erstellen eines Tools, mit dem Python-Dateien mit tkinter & über den Teil, der abgefangen wurde, aufgelistet, ausgewählt und ausgeführt werden können
Eine Geschichte über das Konvertieren von HTML in PDF mit WeasyPrint + matplotlib und das Einbetten von Grafiken [Anfänger lernen Python mit einem Nachschlagewerk]
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
[Python] Ein Programm, das Treppen mit # erstellt
Ein Java-Programmierer studierte Python. (Über Typ)
# 5 [python3] Extrahiert Zeichen aus einer Zeichenfolge
[Python] Sortieren Sie Sammlungstypen als Referenz
Erstellen Sie eine Deb-Datei aus einem Python-Paket
[Python] Erstellen Sie einen LineBot, der regelmäßig ausgeführt wird