Problem

1/8

Schnelle Sortierung: Anfang (Python)

Theory Click to read/hide

Geschwindigkeit

GeschwindigkeitHoara(angl. quicksort), oft genanntqsort(im Namen der Standardbibliothek der C Language) ist ein Sortieralgorithmus, der vom englischen Informanten Charles Hoar während seiner Arbeit an der MOU 1960 entwickelt wurde.

Einer der am schnellsten bekannten Universalalgorithmen der Sortierung von Massen: im Durchschnitt- Ja. in Ordnungn Elemente; aufgrund einer Reihe von Mängeln in der Praxis werden in der Regel einige Verbesserungen verwendet.

Schnelle Sortiermethode Nach dem Prinzip der Trennung und Macht. (seufzt)Orientierung des betreffenden Ziels durch zwei oder mehrere Unterziele gleicher Art, jedoch kleiner, und Kombination ihrer Entscheidungen zur Reaktion auf die Basislinie)

Schnell! ist eine wesentlich verbesserte Version des Algorithmus der Einstufung durch direkten Austausch (z.B. unser "Bublic Class"-Ansatz), bekannt als unsere geringe Leistung. Der grundsätzliche Unterschied besteht darin, dass im ersten Fall Kreuzungen möglichst weit sind und nach jedem Durchgang die Elemente in zwei unabhängige Gruppen aufgeteilt werden. (Auf diese Weise hat sich die Verbesserung der ineffizientsten Direktsortierung aus einer der effektivsten Verbesserungen ergeben.)

Leistungen Schnell! Im Vergleich zu den anderen Algorithmen der schnellen Abschreibung, es ist nicht mit zusätzlichen Massen, es ist an Ort und Stelle sortiert.

Der Algorithmus besteht aus drei Schritten:

  1. Wahl Stützelement aus der MasseX)
  2. Phase AbteilungUmverteilung von Elementen in der Masse so, dass die Elemente weniger repositiv zu ihr und mehr oder gleich zu ihnen nach.
    A[i] PER X
    A[i] Bestandteil= X
    Die Elemente befinden sich nun so, dass kein Element der ersten Gruppe in die zweite Gruppe klassifiziert wird und umgekehrt.
    Daher ist es ausreichend, jeden Teil der Masse zu trennen, der ein Ansatz ist. "separate und master."
  3. Anwendung der ersten beiden SchritteInsgesamt zwei Subbasins auf der linken und rechten Seite des Stützelements. Die Wiederholung gilt nicht für eine Masse, in der nur ein oder keine Elemente vorhanden sind.
Das Umrüstverfahren muss
- ein Volumen, das wir sortieren;
- Index des ersten Teils des klassifizierten Abschnitts;
- Index des letzten Teils der Klasse.
Algorithm auf Pseudokodid:
ALG QUICKSORT(A[], START, END)
 / Ist die Bedingung erfüllt, im Arbeitsteil der Masse
// weniger als zwei Elemente,
/ Ich meine, keine Notwendigkeit, etwas zu sortierenVERFAHREN

 // kann als Stützelement genommen werden
// Durch einen Unfall beim Abschalten,
/ mittel X = MASSIVE LIGHT ELEMENT [START; END]

L = START, R = END
PICK L PER= R
 // Suche nach KonversionselementenPICK A[L] MAN X
L +=1
Artikel X
R 1
 / Bei BedarfELEI L PER=R, dann
METHODEN A[L] UND A[R]
L +=1
R 1

 / verbleibender Teil Eins und Zwei QUICKSORT(A, START, R)
QUICKSORT(A, L, END)
Dieses Verfahren kann einen Teil der Masse verzerren, so dass es ausreicht, die Parameter anzugeben START und END.

Vergleich der Arbeitszeit (in Sekunden) verschiedener Sortieralgorithmen für verschiedene Größen (in Sekunden)N:
NVeröffentlichungenBoxenGeschwindigkeit
5.0000,0390,0160.00031
150000,3590,1410.00078
500003.981.4690,00297

Bitte beachten Sie, dass der schnelle Abschreibungsalgorithmus langsam funktioniert, wenn das Supportelement der kleinste oder größte Teil der Liste ist. Unter diesen Bedingungen wird eine rasche Abstufung am schlimmsten durchgeführtO(n²).

Problem

Anzahl N (1 Kanal = N PO = 100000) und dann N natürliche Chips aus Reichweite 1 vor 100♪ Raus. N Meißel ist unvorstellbar.
Beispiele
NeinEingangsdatenAusgangsdaten
1
5.
3 1 2 4 2
1 2 2 3 4