Nehmen Sie die aufsteigende Ganzzahl als Beispiel, eine kurze Erklärung für den Prozess der bidirektionalen Blasensortierung: Bewegen Sie zuerst die maximale Zahl von vorne nach hinten zum Ende und bewegen Array. Zwei-Wege-Blasensortierung ist etwas besser als das herkömmliche Blasensortieren, da beide Enden des Arrays während der bidirektionalen Sortierung gut sortiert sind, müssen wir nur den mittleren Teil des Arrays verarbeiten, während Einweg, dh traditionelle Blasensortierung, Nur die Elemente am Schwanz. Obwohl es die Effizienz ein wenig verbessert hat, kann es seine Sortierungseffizienz nicht wesentlich verbessern, was durch den grundlegenden Prozess der Blasensortierung bestimmt wird. Auf dieser Grundlage wurde es verbessert.
Zwei-Wege-Bubble-Sortier-Quellcode:
Die Codekopie lautet wie folgt:
Paket com.zc.manythread;
import Java.util.random;
/**
* Zwei-Wege-Blasensortierung
* @Author Ich bin
*
*/
öffentliche Klasse BBSORT {
// Der bidirektionale Blasenalgorithmus verringert die Häufigkeit der Loopsortierung erheblich
public int [] sort (int [] a) löst Ausnahme {aus {
int j;
int limit = a.länge;
int st = -1;
while (st <limit) {
// Die ST und die Grenze müssen zugewiesen werden, sonst, wenn das Array von Anfang an bestellt wird
ST ++;
Limit--;
boolean tauschte = falsch;
// Die erste Schleife setzt den Maximalwert am Ende
für (j = st; j <limit; j ++) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
ausgetauscht = wahr;
}
}
if (! getauscht) {
Rückkehr a;
}anders {
ausgetauscht = falsch;
// Die zweite Schleife setzt den Mindestwert am Anfang ein
für (j = limit; -j> = st;) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
ausgetauscht = wahr;
}
}
if (! getauscht) {
Rückkehr a;
}
}
}
Rückkehr a;
}
private static int [] createdate (int count) {
/**
* Kein doppeltes Array
*/
int [] data = new int [count];
Random rand = new random ();
boolean [] bool = neuer boolean [100];
int num = 0;
für (int i = 0; i <count; i ++) {
Tun {
// Wenn die generierte Zahl gleich ist, werden Sie fortgesetzt, um weiter zu schleifen
Num = Rand.Nextint (100);
} while (bool [num]);
bool [num] = true;
/* list.add (num);* /// listlist
Daten [i] = num;
}
Daten zurückgeben;
}
public static void main (String [] args) {
endgültige int count = 10;
int [] data = createdate (count);
für (int n: data) {
System.out.print (n+"/t");
}
System.out.println ();
BSROT BSROT = neuer BSROT (Daten);
versuchen {
int [] a = bsrot.sort (Daten);
für (int n: a) {
System.out.print (n+"/t");
}
} catch (Ausnahme e) {
// todo automatisch generierter Fangblock
E. printstacktrace ();
}
}
}
Auslaufergebnisse: