Auswahl Sortierzeitkomplexität

Auswahl Sortierzeitkomplexität
Die Sortierart ist eine Art Sortieralgorithmus. Eine unsortierte Liste kann in aufsteigender Reihenfolge oder in absteigender Reihenfolge sortiert werden. Betrachten Sie die unsortierte Liste:
55 65 35 15 85 75 25 45

Wenn diese Liste in aufsteigender Reihenfolge sortiert ist, wäre dies:

15 25 35 45 55 65 75 85

Wenn die Liste in absteigender Reihenfolge sortiert ist, wäre dies:

85 75 65 55 45 35 25 15 15

In diesem Artikel wird nur das Sortieren in aufsteigender Reihenfolge berücksichtigt. Sortiersarten aus der Auswahl, indem sie nach kleinen Elementen suchen und sie mit den Startelementen aus dem kleinsten Element tauschen, während die ersetzten Startelemente aufsteigen werden. Eine Liste sollte am Ende dieses Prozesses in aufsteigender Reihenfolge sortiert werden.

Der Artikel zielt darauf ab, die zeitliche Komplexität der Auswahlsorte zu bestimmen. Die folgende Programmierung erfolgt in der C -Sprache.

Auswahl -Sortieralgorithmus

Die Schritte für die Auswahlsart sind wie folgt:

  • Angenommen, das erste Element ist das kleinste Element.
  • Vergleichen Sie dieses Element mit den anderen Elementen, um das wahre kleinste Element zu kennen.
  • Tauschen Sie das kleinste Element mit dem ersten Element aus.
  • Wiederholen Sie die vorherigen drei Schritte in der Reihenfolge, ausgenommen das erste ersetztes Element.
  • Wiederholen Sie weiter.
  • Sortieren endet, wenn das letzte Element erreicht ist.

Hier gibt es zwei Hauptbetriebstypen, die Vergleich und Tausch sind. Das Wechsel von einem Element zum nächsten ist ebenfalls eine Operation, dauert jedoch relativ wenig im Vergleich zum Vergleichs- oder Tauschbetrieb in der Auswahlsorte.

An2) Zeitkomplexität

Betrachten Sie den folgenden Code:

int result = 0;
für (int i = 0; i<8; i++)
für (int j = 0; j<8; j++)
Ergebnis = Ergebnis + 1;


printf ("%i \ n", Ergebnis);

Es gibt eine äußere und innere Schleife. Jede Schleife iteriert achtmal. Der einzige Zusatzbetrieb für beide Schleifen ist der Hauptbetrieb und arbeitet 64 Mal. 64 = 8 x 8 = 82. Der Ausgang ist 64.

Dieser Code hat 82 Hauptvorgänge. Wenn 8 durch N ersetzt wird, würde die zeitliche Komplexität als:

O (N2)

Dies verwendet die Big-O-Notation. Die Notation beginnt mit O in Großbuchstaben, gefolgt von Klammern. Innerhalb der Klammern befindet sich die Anzahl der Hauptvorgänge für den Code.

Betrachten Sie den folgenden Code:

int result = 0;
für (int i = 0; i<8; i++)
für (int j = i; j<8; j++)
Ergebnis = Ergebnis + 1;


printf ("%i \ n", Ergebnis);

Die äußere Schleife iteriert achtmal. Die innere Schleife iteriert bis zum achten Mal, beginnt aber von i, was die Iterationsnummer der äußeren Schleife ist. Die Ausgabe ist 36. Der einzige Zusatzbetrieb arbeitet 36 Mal und nicht 64 Mal. Nun, dies wird immer noch als O (N2) -Zeitkomplexität angesehen. Die Arbeit der Auswahlsart ähnelt diesem Code. Mit anderen Worten, es wird angenommen.

Codierung in c

Die Sortierung der Selektion ergibt immer O (N2) Zeit Komplexität. Es spielt keine Rolle, wie die Elemente des Arrays angeordnet sind. Dies liegt daran, dass alle Elemente zuerst gescannt werden; Dann werden der Rest der Elemente ohne die ersten als nächstes gescannt; Das Scannen des Restes der Elemente ohne die ersten beiden folgt und so weiter. Das Scannen muss vor dem Austausch abgeschlossen sein.

Die zu sortierende Liste lautet:

P o i u y t r e w q

Das C -Programm sortiert in aufsteigender Reihenfolge. Im Wesentlichen beginnt das Programm mit:

#enthalten
Void Selptiosort (char a [], int n)
für (int i = 0; iint minindx = i;
für (int j = i+1; jif (a [j] < A[minIndx])
minindx = j;

char temp = a [i]; A [i] = a [minindx]; A [minindx] = temp; // tauschen

Die Bibliothek für Eingaben von der Tastatur und die Ausgabe in den Monitor ist enthalten. Dann gibt es die Definition der Auswahlsartfunktion. Diese Funktion als Parameter hat das Array (Referenz) mit der Liste und der Anzahl der Elemente im Array.

Es gibt zwei für Schleifen; Einer ist in den anderen verschachtelt. Die äußere For-Loop iteriert über alle Elemente, die von Anfang an beginnen. Während sich die äußere For-Loop in einem Index befindet, iteriert der innere For-Loop über den Rest der Elemente, ausgenommen das vorhergehende Element. Der Hauptvorgang ist der Vergleichsvorgang in der verschachtelten For-Loop.

Der Austausch erfolgt für jede Iteration der äußeren Schleife kurz nach Abschluss der inneren Schleife.

Eine geeignete C -Hauptfunktion für das Programm ist:

int main (int argc, char ** argv)

int n = 10;
char a [] = 'p', 'o', 'i', 'u', 'y', 't', 'r', 'e', ​​'w', 'q';
Selektion (a, n);
für (int i = 0; iprintf ("%c", a [i]);
printf ("\ n");
Rückkehr 0;

Die Ausgabe ist:

E i o p q r t u w y

sortiert.

Es beginnt mit der Erklärung der Anzahl der Elemente im Array. Dann gibt es die Array -Erklärung. Es gibt zehn Elemente im Array. Diese Elemente sind Charaktere. Die Array -Erklärung beginnt also mit "Char". Als nächstes wird die Einfügungssortierungsfunktion aufgerufen. Das erste Argument des Funktionsaufrufs ist der Array -Name. Das zweite Argument ist die Anzahl der Elemente im Array.

Eine For-Loop folgt. Dies druckt die sortierten Charaktere aus dem Schleife. Es verwendet die printf () -Funktion des stdio.H Bibliothek. Das erste Argument dieser Funktion ist eine Zeichenfolge. Diese Zeichenfolge ist eine spezielle Zeichenfolge, hat aber immer noch Zeichen, die gedruckt werden würden. Es hat auch Parameter für Argumente. In diesem Fall gibt es nur einen Parameter, %c. Es gibt auch nur ein Argument, ein [i]. Nachdem alle Zeichen in einer Zeile gedruckt wurden.

Abschluss

In diesem Artikel wurde die Schritte für die Auswahlsorten erörtert, darunter die Annahme, dass das erste Element das kleinste Element ist, dieses Element mit den Resten der Elemente zu vergleichen und das wahre kleinste Element zu kennen. Darüber hinaus muss ein Benutzer das kleinste Element mit dem ersten Element tauschen und die vorherigen drei Schritte in der Reihenfolge wiederholen, ohne das erste ersetztes Element. Die letzten Schritte umfassen weiterhin die drei obigen Schritte, ausgenommen die Elemente nach links (unterer) Ende, die ersetzt wurden. Sortieren endet, wenn das letzte Element erreicht ist. Die zeitliche Komplexität für die Auswahlsart ist O (N2).