Blasenart mit Java

Blasenart mit Java
Bubble Sort ist der einfachste Sortieralgorithmus: Angenommen, es gibt Elemente in einer Reihe, die nicht sortiert sind. Bubble Sort scannt die Reihe von links und tausch. Dieses Scannen der gesamten Zeile wird wiederholt wiederholt wiederholt, bis die gesamte Zeile sortiert ist. Wenn die Sortierung aufsteigt, wird das benachbarte Paar ausgetauscht, um das Element links weniger als das Element rechts zu machen. Wenn die Sortierung absteig.

Bubble Sortal Illustration ohne Code

Betrachten Sie die folgende unortierte Zeilenliste der Zeichen des Alphabets:

Q w e r t y u i o p

Diese Liste wird wie folgt in aufsteigender Reihenfolge sortiert. Im ersten Scan werden Q und W verglichen; Q ist weniger als w, also gibt es keinen Tausch. Im ersten Scan werden jedoch w und e verglichen; E ist weniger als w, also gibt es austauschen. Das neue dritte Element, W, wird mit r verglichen; R ist weniger als w, also tauschte es aus. Das neue vierte Element W wird mit T verglichen; T ist weniger als w, also tauschte es aus. Das neue fünfte Element W wird mit y verglichen; W ist weniger als y, und es gibt keinen Austausch. Im ersten Scan wird Y mit u verglichen; U ist weniger als y, also gibt es austauschen. Das neue siebte Element y wird mit i verglichen; Ich ist weniger als Y, und es gibt Tausch. Das neue achte Element Y wird mit O verglichen; O ist weniger als y, und es gibt Tausch. Das neue neunte Element y wird mit P verglichen; P ist weniger als y, und es gibt Tausch. Der erste Scan endet dort. Das Ergebnis für den ersten Scan ist,

Q e r t w u i o p y

Beachten Sie, dass das größte Element nach dem ersten Scan am Ende liegt. Das Scannen aller resultierenden zehn Elemente und möglichen Austausch wird erneut wiederholt, um:

E r q t u i o p w y

Beachten Sie, dass das nächstgrößte Element jetzt das letzte, aber ein Element ist und es nicht erforderlich war, es mit dem letzten Element zu vergleichen, sodass eine kleine Zeit nicht verschwendet worden wäre. Das Scannen aller resultierenden zehn Elemente und möglichen Austausch wird erneut wiederholt, um:

E q r t i o p u w y

Beachten Sie, dass das drittgrößte Element gegen Ende jetzt von Anfang an die dritte Position liegt und es nicht erforderlich war, es mit den letzten beiden Elementen zu vergleichen und die letzten beiden Elemente selbst zu vergleichen, und so einige kleine Zeit wäre nicht verschwendet worden. Das Scannen aller resultierenden zehn Elemente und möglichen Austausch wird erneut wiederholt, um:

E q r i o p t u w y

Beachten Sie, dass das viertgrößte Element gegen Ende jetzt von Anfang an die vierte Position ist und es nicht erforderlich war, es mit den letzten drei Elementen zu vergleichen, und keine Notwendigkeit, die letzten drei Elemente selbst zu vergleichen, und so würde einige Zeit nicht wurden verschwendet. Das Scannen aller resultierenden zehn Elemente und möglichen Austausch wird erneut wiederholt, um:

E q i o p r t u w y

Beachten Sie, dass das fünftgrößte Element gegen Ende jetzt von Anfang an die fünfte Position ist und es nicht erforderlich war, es mit den letzten vier Elementen zu vergleichen, und es ist nicht erforderlich, die letzten vier Elemente selbst zu vergleichen, und so hätte die Zeit nicht wurde verschwendet. Das Scannen aller resultierenden zehn Elemente und des möglichen Austauschs wird erneut wiederholt, um:

E i o p q r t u w y

Der Rest der Scanergebnisse lauten wie folgt:

E i o p q r t u w y
E i o p q r t u w y
E i o p q r t u w y
E i o p q r t u w y

Beachten Sie, dass für diese letzten vier Ergebnisse keine Sortierung stattgefunden hat.

Die Rückseite aller oben genannten Algorithmen kann für die Sortierstufe durchgeführt werden.

Blasensorten optimieren

Aus der grundlegenden Definition der Blasensorte, wenn es N -Elemente gibt, wird es keine vollständigen Scans geben. Ein Scan ist eine Iteration. Die oben genannten zehn Elemente bedeuten also zehn vollständige Iterationen. Die Gesamtdauer der Zeit bis zur Blase sortiert eine Liste (Array) kann für viele ungewöhnliche Listen reduziert werden. Dies beinhaltet die Strategien von Blasensortier. Die Blasensorte ist mit zwei Strategien optimiert.

Erste Optimierungsstrategie

Beachten Sie von der oben genannten, dass nach der ersten vollständigen Iteration das größte Element am Ende ist und es Zeitverschwendung wäre, in der zweiten Iteration darauf zuzugreifen. Nach der zweiten Iteration befinden sich die letzten beiden Elemente in ihren richtigen Positionen, und die Zeit sollte nicht in der dritten Iteration verschwendet werden. Dies bedeutet, dass die zweite Iteration bei N-1 enden sollte. Nach der dritten Iteration befinden sich die letzten drei Elemente in ihren richtigen Positionen, und die Zeit sollte nicht in der vierten Iteration verschwendet werden. Dies bedeutet, dass die dritte Iteration bei N-2 enden sollte. Nach der vierten Iteration befinden sich die letzten vier Elemente in ihren richtigen Positionen, und die Zeit sollte nicht in der fünften Iteration verschwendet werden. Dies bedeutet, dass die vierte Iteration bei N-3 enden sollte. Das geht weiter.

Aus der grundlegenden Definition der Blasensorte muss die Iteration n -mal erfolgen. Wenn der Zähler für die N -Iterationen bei i liegt, sollte die Iteration auf n - i Elemente zugreifen, um die Zeit am Ende des Arrays zu vermeiden. und mit mir beginne von 0. Es muss also zwei Java For-Loops geben: die äußere For-Loop iteriert die n-mal, und die innere For-Loop-Iteraten n-ich Zeiten für die Array-Elemente für jedes der n-mal. Das Iterieren eines Array n - Ich bin die erste Strategie.

Zweite Optimierungsstrategie

Sollte die äußere For-Loop wirklich n-mal iterieren? Sollte die äußere For-Loop für die obige Liste 10 Mal wiederholen? - Nein, weil seine letzten vier Iterationen nichts ändern würden (es macht keine Sortierung). Dies bedeutet, dass die Liste sortiert wurde, sobald sie erkannt wird. Die äußere Schleife sollte brechen, daher sollte die Sortierung aufhören. Dies spart mehr Zeit. Dies kann erreicht werden, indem eine boolesche Variable für die Außenschleife vorliegt, die beim Innenschleife beim Tauschstopps falsch bleiben würde.

Java -Code für die Blasenart

Die folgende Klasse hat die Methode, um die Sortierung durchzuführen:

Klasse aclass
statische void Bubblesort (char arr [])
int n = arr.Länge;
boolean tauschte = falsch;
für (int i = 0; i < N; i++)
ausgetauscht = falsch;
für (int j = 1; j < N - i; j++)
if (arr [j] < arr[j - 1])
char temp = arr [j];
arr [j] = arr [j - 1];
arr [j - 1] = temp;
ausgetauscht = wahr;


if (ausgetauscht == false) brechen;


Beachten Sie die Bedingung, „J < N - i;” for the inner for-loop, for the first strategy. Note the use of the boolean variable in the outer for-loop and the inner for-loop for the second strategy.

Eine geeignete Hauptklasse dafür ist:

öffentliche Klasse Theclass
public static void main (String [] args)
char ar [] = 'q', 'w', 'e', ​​'r', 't', 'y', 'u', 'i', 'o', 'p';
Eine Klasse.Bubblesort (AR);
für (int i = 0; iSystem.aus.print (ar [i]); System.aus.drucken(' ');

System.aus.println ();

Das Array wird unter Bezugnahme auf die Methode Bubblesort () in einer anderen Klasse übergeben. Der Inhalt wird also geändert. Die Ausgabe ist:

E i o p q r t u w y

Abschluss

Bubble Sorts Sorts, indem sie benachbarte Elemente vom Anfang bis zum Ende der Liste tauschen. Dieser Vorgang wird immer wieder wiederholt, bis die gesamte Liste vollständig sortiert ist. Die Sortierung steigt entweder auf oder absteigt ab. Die Blasensortierung sollte optimiert werden, wie oben erläutert.