Prenant le tri entier ascendant à titre d'exemple, une brève explication du processus de tri de bulles bidirectionnelles: déplacez d'abord le nombre maximum de l'avant à l'arrière, puis déplacez le plus petit numéro de l'arrière vers l'avant à l'avant de la Array. Le tri à bulles bidirectionnel est légèrement meilleur que le tri traditionnel de bulles, car les deux extrémités du tableau sont bien triées pendant le tri bidirectionnel, nous n'avons qu'à traiter la partie médiane du tableau, tandis que c'est simple, c'est-à-dire le tri de bulles traditionnel, Seuls les éléments à la queue. Bien qu'il ait amélioré un peu d'efficacité, il ne peut pas améliorer de manière significative son efficacité de tri, qui est déterminée par le processus de base du tri des bulles. Sur cette base, il a été amélioré.
Code source de tri à bulles bidirectionnel:
La copie de code est la suivante:
Package com.zc.ManyThread;
import java.util.random;
/ **
* Sort à bulles bidirectionnel
* @author je suis
*
* /
classe publique Bbsort {
// L'algorithme de bulle bidirectionnel réduit considérablement le nombre de fois de tri de boucle
public int [] tri (int [] a) lève une exception {
Int J;
int limit = a.Length;
int st = -1;
while (st <limit) {
// La ST et la limite doivent être attribuées, sinon si le tableau est commandé depuis le début
st ++;
limite--;
booléen échangé = false;
// La première boucle met la valeur maximale à la fin
pour (j = st; j <limite; j ++) {
if (a [j]> a [j + 1]) {
int t = a [j];
a [j] = a [j + 1];
a [j + 1] = t;
échangé = true;
}
}
if (! échangé) {
retourner a;
}autre {
échangé = false;
// La deuxième boucle met la valeur minimale au début
pour (j = limite; --j> = st;) {
if (a [j]> a [j + 1]) {
int t = a [j];
a [j] = a [j + 1];
a [j + 1] = t;
échangé = true;
}
}
if (! échangé) {
retourner a;
}
}
}
retourner a;
}
private static int [] CreateDate (int count) {
/ **
* Pas de tableau en double
* /
int [] data = new int [count];
Random Rand = new Random ();
Boolean [] bool = new Boolean [100];
int num = 0;
pour (int i = 0; i <count; i ++) {
faire {
// Si le nombre généré est le même, continuez à boucler
num = rand.nextint (100);
} while (bool [num]);
bool [num] = true;
/ * list.add (num); * /// Liste de liste
data [i] = num;
}
retourner les données;
}
public static void main (String [] args) {
Count int final = 10;
int [] data = CreateDate (count);
pour (int n: data) {
System.out.print (n + "/ t");
}
System.out.println ();
BSROT BSROT = NOUVEAU BSROT (DATA);
essayer {
int [] a = bsrot.sort (données);
pour (int n: a) {
System.out.print (n + "/ t");
}
} catch (exception e) {
// Bloc de capture généré automatiquement de TODO
e.printStackTrace ();
}
}
}
Résultats en cours: