Si le tableau est trié en premier, disons par ordre croissant, la recherche devient facile. L'indice est inférieur à l'index de l'élément central, si la clé est inférieure à la valeur de l'index moyen, ou que l'index est égal ou supérieur à celui de l'index moyen, si la valeur est égale ou supérieure à celui de la valeur d'index moyen.
Alors divise le tableau en deux. Si la valeur se trouve sur le côté gauche, pas besoin de perdre du temps à rechercher le côté droit; Recherchez simplement le côté gauche. Si la valeur se trouve sur le côté droit, pas besoin de perdre du temps à rechercher le côté gauche; Recherchez simplement le côté droit. Étant donné que le tableau est déjà complètement trié, lorsque les deux côtés sont arrivés, il est à nouveau divisé en deux, et une seule des nouvelles paires de côtés est fouillée. En fait, la recherche de cette façon est simplement en divisant en deux, jusqu'à ce que l'index de la valeur soit arrivé à. Aucune recherche réelle en termes de numérisation n'a lieu car le tableau est déjà trié. Il peut y avoir un léger déménagement à droite, et un léger mouvement à gauche dans le tableau pendant la recherche.
Le binaire implique, deux. Et donc ce type de recherche s'appelle la recherche binaire. Il existe différentes commandes de tri: toutes les valeurs du tableau peuvent être triées en ordre croissant ou en complètement l'ordre descendant. Un tableau peut également être trié dans ce qui est connu sous le nom de format d'arbre de recherche binaire. Ce n'est pas un tri complet dans l'ordre croissant ou descendant. Cependant, la recherche d'algorithme binaire fonctionne toujours avec ce format.
Cet article explique la recherche binaire Java. L'algorithme de recherche binaire dans Java fonctionne sur un tableau déjà trié. Seul le tri complet dans l'ordre croissant est considéré dans cet article. Cet article commence par l'illustration de l'algorithme de recherche binaire. Il explique ensuite comment utiliser les méthodes BinarySearch () de la classe Java Arrays.
Contenu de l'article
Illustration de l'algorithme de recherche binaire
Considérez la séquence de caractères suivante:
P v d q s x t h n oArrangeant par ordre croissant, la séquence devient:
D h n o p q s t v xIl y a dix éléments ici. Le comptage d'index commence à partir de 0. Lorsque le nombre d'éléments est uniforme (e.g., 10), l'indice de l'élément central est considéré comme le nombre d'éléments divisés par deux. Dans ce cas, 10/2 est 5. Lorsque le nombre d'éléments est impair, l'index pour l'élément central est considéré comme la partie entière (nombre entier) du nombre d'éléments divisé par deux.
Il y a deux listes ci-dessus. Le second est la forme triée du premier. Supposons que la recherche devait savoir si S était présent dans la première liste. La liste devrait d'abord être triée pour avoir la deuxième liste du schéma de recherche binaire. Dans la liste triée, l'index pour la position moyenne est de 5 = 10/2. Cela correspond à la valeur, q. La recherche s'arrête alors pour vérifier si q est s, la valeur recherchée. Si c'est le cas, alors la recherche s'arrête. Si ce n'est pas le cas, la recherche vérifie si S se trouve moins de q ou de Q vers le haut.
Dans ce cas, il réside dans la plage de Q vers le haut, qui est ensuite choisi. Aucun temps ne sera perdu en cherchant la moitié inférieure de la liste (tableau). Donc, cette nouvelle gamme doit être divisée en deux. Cette gamme se compose de 5 éléments. 5/2 = 2 et un 1/2. L'élément central est en position 2 de cette nouvelle gamme. Cela correspond à t, si le comptage de zéro est de commencer à partir de q. L'indice réel de t est 7.
La plage inférieure ou gauche se compose désormais de (q s), tandis que la nouvelle gamme supérieure ou droite se compose désormais de (t v x). Est le nouvel élément central, T du même que S, la valeur recherchée? - Non. Dans quelle gamme se trouve S; est-ce dans la plage inférieure, (q s) ou dans la plage supérieure, (t v x)? - Il se trouve dans la gamme inférieure.
Ainsi, la gamme inférieure (Q S) doit alors être divisée en deux. Lorsque cela est fait, l'index moyen de cette plage correspond à S (2/2 = 1, car q est à nouvel index 0). L'indice réel pour S est de 6 (D est à l'index d'origine 0). L'indice de la valeur trouvée doit être renvoyé.
Clé introuvable
La valeur recherchée est appelée la clé. La liste triée a en fait deux indextes comme indiqué ci-dessous:
D | H | N | O | P | Q | S | T | V | X |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -dix |
La première ligne de ce tableau a la liste triée. La deuxième ligne a l'indexation normale. La troisième ligne a une sorte d'indexation négative où le premier élément est à l'index -1, le second est à l'index -2, le troisième à l'index -3, etc.
Si la clé est trouvée, l'algorithme Java renverra l'index normal, à partir de 0. Si la clé n'est pas trouvée, l'algorithme Java renverra l'indice négatif pour la position que la clé aurait occupée (en supposant que le tableau s'étend à droite par un élément).
Package Java et classe pour la recherche binaire
Le schéma de recherche binaire Java fonctionne sur un tableau déjà trié. Les tableaux de classe Java, qui se trouve dans le java.user.* Package, a binarysearch () Méthodes pour la recherche binaire d'un tableau déjà trié. Chacune de ces méthodes renvoie un entier qui est un index normal si la clé est trouvée, ou un indice négatif, comme expliqué ci-dessus, si la clé n'est pas trouvée. Deux de ces méthodes sont destinées aux caractères.
Construire le tableau de recherche
La deuxième liste ci-dessus sera utilisée pour illustrer le codage de recherche binaire en Java. L'instruction suivante peut être utilisée pour construire le tableau trié:
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;Le schéma de recherche binaire Java fonctionne sur une liste déjà triée.
Méthodes de recherche binaire de la classe des tableaux
Le tableau ci-dessus de Chars sera utilisé dans cette section pour l'illustration. Les méthodes de recherche binaire sont dans la classe des tableaux du java.user.* emballer. Ce package doit être importé pour que la classe des tableaux soit utilisée.
Toutes les méthodes de la classe des tableaux sont des méthodes statiques. Cela signifie qu'un objet n'a pas besoin d'être instancié pour aucune de ses méthodes à utiliser. Deux de ces méthodes sont des méthodes de recherche binaires pour Chars. La syntaxe de l'une des méthodes de recherche binaire, pour les caractères est:
public static int binararysearch (char [] a, char key)Le programme suivant recherche S qui se trouve:
Importer Java.user.*La sortie est 6. Le segment de code suivant recherche B, U et Z qui ne sont pas trouvés.
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;La sortie est,
-1 -9 -11Recherche d'une plage
La syntaxe pour rechercher une gamme de caractères est:
public static int binararysearch (char [] a, int fromindex, int toindex, char key)FromIndex est l'indice normal à lequel la plage commence. Toindex est l'indice normal juste après le dernier élément de la plage. Le segment de code suivant recherche le tableau trié commençant de l'index 3 à l'index 7, qui est l'index 8. L'élément de l'index 8 n'est pas inclus dans la plage.
char [] arr = new char [] 'd', 'h', 'n', 'o', 'p', 'q', 's', 't', 'v', 'x' ;La clé est s, et la sortie est 6.
Conclusion
Les syntaxes des tableaux pour la recherche d'un tableau de types primitifs sont: