Schnelle Sortierzeit Komplexität

Schnelle Sortierzeit Komplexität
Schnelle Sortierung, ebenfalls als Quicksort geschrieben, ist ein Sortieralgorithmus für Kluft und Konquer. Bei der Codierung würde das QuickSort -Programm aus einer SWAP () -Funktion, einer Pivot () -Funktion, einer Partition () -Funktion und der Quicksort -Funktion selbst bestehen. Sowohl die Funktionen pivot () als auch partition () rufen die Swap () -Funktion auf. Die Funktion quicksort () selbst ist kurz und ruft die Funktionen Pivot () und Partition () auf. Es ruft sich rekursiv an zwei Stellen in seinem Körper an.

Jetzt gibt es verschiedene Möglichkeiten, die Funktionen von Pivot () und Partition () zu schreiben. Die Wahl der Art der Funktion von Pivot () und/oder Partition () bestimmt die Effizienz des gesamten Programms. Effizienz ist wie die Anzahl der Hauptvorgänge, die vom Programm durchgeführt werden.

Zeitkomplexität ist die relative Laufzeit eines Programms. Dies kann als Hauptbetrieb des Programms angesehen werden.

Sortierung kann aufsteigend oder absteigend sein. In diesem Artikel steigt die Sortierung auf.

Ziel dieses Artikels ist es, die zeitliche Komplexität für ein Quicksort -Programm zu erstellen. Da Quicksort je nach Auswahl des Pivot- () und/oder der Partition () -Funktionen auf unterschiedliche Weise geschrieben werden kann, hat jeder Schnellsortyp seine eigene Zeitkomplexität. Es gibt jedoch eine Reihe einer Reihe von Operationen, in die die verschiedenen Arten von Quicksort -Programmen passen. Dieser Artikel enthält nur eine der verschiedenen Arten von Quicksort -Programmen. Jedes Codesegment ist aus der C -Sprache.

Ganzzahl Division von zwei

Quick Sort verwendet die Ganzzahl -Division, um den Hauptsatz in kleinere Sets aufzuteilen.

Jetzt,
11/2 = 5 Rest 1

Integer Division bedeutet, 5 zu nehmen und 1 zu verlassen. Das heißt, akzeptieren Sie die gesamte Anzahl und ignorieren Sie den Rest.

Auch,
10/2 = 5 Rest 0

Hier ist der Rest Null und spielt keine Rolle. Trotzdem nimmt die Ganzzahl Division 5 und Abandons 0. Das heißt, akzeptieren Sie die ganze Zahl und ignorieren Sie, was der Rest da ist, auch wenn es Null ist. Manchmal ist es auch bei der Programmierung gut zu wissen, ob der Rest 0 ist oder nicht - später siehe.

Bei der Aufteilung einer Liste in Quick-Sorts wird die Ganzzahlabteilung verwendet, was verwendet wird.

Um den Null-basierten Mittelindex für eine Liste zu erhalten, finden Sie eine ganzzahlige Division für die Länge der Liste um zwei Personen. Die gesamte Zahl ist der nullbasierte mittlere Index. Um die Länge der Liste zu erhalten, beginnen Sie von 1 zu zählen.

Zeitkomplexität im Zusammenhang mit der schnellen Sorte

Betrachten Sie den folgenden Code:

int n = 8;
char a [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'H';
für (int i = 0; iprintf ("%c", a [i]);

printf ("\ n");

Die Ausgabe ist:

A B C D E F G H

Das heißt, alle acht Elemente wurden gedruckt.

Es gibt acht Elemente von N identifiziert. Der Körper des For-Schleife hat einen Inhalt.

printf ("%c", a [i]);

Dies ist eine Hauptoperation. Also haben acht Hauptoperationen stattgefunden. Die zeitliche Komplexität für diesen Code wird geschrieben als:

An)

Wobei n die Anzahl der Hauptoperationen ist. Dies ist die große Notation. In der Notation befindet sich der erste Buchstabe o in Großbuchstaben. Dann gibt es Klammern. Innerhalb der Klammern befindet sich die Anzahl der Operationen oder die maximal mögliche Anzahl von Operationen.

Betrachten Sie nun das folgende Codesegment:

für (int i = 0; i<8; i++)
für (int i = 0; iprintf ("%c", a [i]);
if (i == 2)
brechen;

printf ("\ n");

Die Ausgabe ist:

a b c

Der Körper des For-Schleife hat einen Inhalt.

printf ("%c", a [i]);
if (i == 2)
brechen;

Dies gilt immer noch als eine Hauptoperation in dieser Situation. Drei Elemente wurden gedruckt, weil der Hauptvorgang dreimal ausgeführt wurde.

Jetzt,
8 = 23
=> 3 = log2(8)

Wenn 8 n ist, dann ist 3,
Protokoll2(N)

Und die zeitliche Komplexität würde gegeben als:
O (Protokoll2N)

Es gibt noch ein weiteres Codesegment, das in Bezug auf die Komplexität der Quicksort -Zeit berücksichtigt werden muss. Es ist

für (int i = 0; ifür (int j = 0; jprintf ("%c", a [j]);

printf ("\ n");

printf ("\ n");

Die Ausgabe ist:

A B C D E F G H
A B C D E F G H
A B C D E F G H
A B C D E F G H
A B C D E F G H
A B C D E F G H
A B C D E F G H
A B C D E F G H

Die Anzahl der gedruckten Zeichen beträgt 64 aus einer Anfangszahl von 8. Dies bedeutet, dass der Hauptvorgang 64 Mal ausgeführt wurde.

64 = 8 x 8 = 82

Wenn 8 n ist, wäre dies n n2. Die Zeitkomplexität für diesen Code ist:
An2)

Schnellsortalgorithmus in diesem Artikel

Für diesen Artikel sind die Schritte des Algorithmus:

  • Suchen Sie nach dem Median (siehe unten) zwischen dem ersten Element, dem mittleren Element und dem letzten Element der Liste.
  • Positionieren Sie den Median in der Mitte der Liste.
  • Senden Sie alle Elemente rechts, die weniger als der Median, jetzt in der Mitte, links vom Median, und senden Sie alle Elemente links, die größer als der Median rechts vom Median sind. Dies wird als Partitionierung bezeichnet.
  • Wiederholen Sie die oben genannten drei Schritte für jede Unterliste, bis die Liste in einzelne Elemente unterteilt wurde.
  • Wenn die Liste aus getrennten einzelnen Elementen besteht, wird die Liste sortiert.

Median

Um den Median der drei Elemente zu erhalten,

TAXI

ordnen die drei Elemente in Ordnung um, ich.e.

A b c

Das mittlere Element B ist der Median.

Schnelle Sortierillustration

Die zu sortierende Liste lautet:

P v d q s x t b

Es gibt acht Elemente. Wenn die Liste sortiert wurde, wäre es:

B D P q s t v x

Das Problem ist also: Sortieren Sie die Liste:

P v d q s x t b

Verwenden von Quicksort.

Der Median zwischen P, Q und B wird nach gesucht. Es ist p. Diese Suche nach dem Median umfasst drei Operationen. Es gibt also bisher insgesamt drei Operationen. Wenn Sie den Median in die Mitte der Liste stellen, gibt es:

V d q p s x t b

Denken Sie daran: Der Index für das mittlere Element ist das Ergebnis der Ganzzahl -Division von zwei. Hier gibt es vier Bewegungen für P und Q. Das sind vier Operationen. Das macht insgesamt sieben Vorgänge (drei plus vier). Jetzt wird B nach links gesendet, und V und Q werden nach rechts gesendet, um:

D b p v q s x t

Beachten Sie, dass P nicht mehr in der wahren Mitte ist. Es gab jedoch drei Bewegungen. Dies sind drei Operationen. Bisher gibt es zehn Operationen (sieben plus drei). Jeder der beiden Unterlisten muss in drei Teile aufgeteilt werden (der Median ist ein Teil).

Der Median für D und B ist D. Die Suche nach dem Median ist drei Operationen. Das macht bisher insgesamt dreizehn Operationen (zehn plus drei). Das Partitionieren dieser Elemente gibt:

B d

Hier gab es zwei Bewegungen. Das sind zwei Operationen. Dies macht bisher insgesamt fünfzehn Operationen (dreizehn plus zwei). Als Nächst.

Der Median für V, S und t ist t. Die mittlere Suche ist drei Operationen. Bisher gab es achtzehn Operationen (fünfzehn plus drei). T in die Mitte geben: gibt:

V q t s x

Hier gibt es drei Bewegungen. Dies sind drei Operationen. Die Gesamtzahl der bisherigen Operationen beträgt einundzwanzig (achtzehn plus drei). Das Senden niedrigerer Elemente rechts von T nach links und höhere Elemente links von T nach rechts gibt:

Q s t v x

Hier gibt es zwei Bewegungen. Dies sind zwei Operationen. Bisher gibt es insgesamt dreiundzwanzig Operationen (einundzwanzig plus zwei). Wenn Sie alle Partitionen zusammenfügen, gibt es bisher:

B D P q s t v x

Beachten Sie, dass die Liste bereits sortiert ist. Der Algorithmus muss jedoch enden. Q, s und v, x müssen darauf achten werden. Es wird keine Bewegung von Charakteren zwischen diesen beiden geben. Ihr Median wird jedoch betrachtet. Die Suche nach zwei Medianen beträgt sechs Operationen. Dies macht insgesamt neunundzwanzig Operationen für das gesamte Programm (23 plus sechs). Die endgültige sortierte Liste lautet:

B D P q s t v x

Notiz:
24 = 8 x 3
=> 24 = 8xlog28

29 entspricht ungefähr 24.

Abschluss

Abhängig von der Art der für pivot () () und der für Partition () ausgewählten Funktionstypen () wird die Zeitkomplexität für das QuickSort -Programm irgendwo dazwischen liegen

An.Protokoll2N)

Und

An2)

inklusiv. Beachten Sie, dass der Punkt in o (n).Protokoll2n) bedeutet Multiplikation.