Tableaux.binarySearch() La méthode recherche dans le tableau spécifié du type de données donné la valeur spécifiée à l'aide de l'algorithme de recherche binaire. Le tableau doit être trié comme par le Tableaux.sort() méthode avant de passer cet appel. S'il n'est pas trié, les résultats ne sont pas définis. Si le tableau contient plusieurs éléments avec la valeur spécifiée, il n'y a aucune garantie lequel sera trouvé. Passons en revue l'illustration fournie ci-dessous comme suit.
Illustration:
Searching for 35 in byteArr[] = {10,20,15,22,35} will give result as 4 as it is the index of 35 Searching for g in charArr[] = {'g','p','q','c','i'} will give result as 0 as it is the index of 'g' Searching for 22 in intArr[] = {10,20,15,22,35}; will give result as 3 as it is the index of 22 Searching for 1.5 in doubleArr[] = {10.2,15.1,2.2,3.5} will give result as -1 as it is the insertion point of 1.5 Searching for 35.0 in floatArr[] = {10.2f,15.1f,2.2f,3.5f} will give result as -5 as it is the insertion point of 35.0 Searching for 5 in shortArr[] = {10,20,15,22,35} will give result as -1 as it is the insertion point of 5> C'est la méthode la plus simple et la plus efficace pour rechercher un élément dans un tableau trié en Java
Syntaxe:
public static int binarySearch(data_type arr, data_type key)>
Souviens-toi: Ici, le type de données peut être n'importe lequel des types de données primitifs tels que byte, char, double, int, float, short, long et même object.
Paramètres:
- Le tableau à rechercher
- La valeur à rechercher
Type de retour : index de la clé de recherche, si elle est contenue dans le tableau ; sinon, (-(point d'insertion) – 1). Le point d'insertion est défini comme le point auquel la clé serait insérée dans le tableau : l'index du premier élément supérieur à la clé, ou a.length si tous les éléments du tableau sont inférieurs à la clé spécifiée. Notez que cela garantit que la valeur de retour sera>= 0 si et seulement si la clé est trouvée.
Il y a certains points importants à garder à l’esprit comme suit :
- Si la liste d'entrée n'est pas triée, les résultats ne sont pas définis.
- S’il y a des doublons, il n’y a aucune garantie lequel sera trouvé.
Comme ci-dessus, nous avons déjà expliqué que nous pouvons utiliser cet algorithme soit Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() fonctionne pour les tableaux qui peuvent également être de type de données primitif. Collections .binarysearch() fonctionne pour les collections d'objets comme Liste des tableaux et Liste liée .
Exemple 1:
Java
types de tests
modèles de programmation Java
// Java program to demonstrate working of Arrays.> // binarySearch() in a sorted array> // Importing Arrays class from> // java.util package> import> java.util.Arrays;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Declaring and initializing byte arrays> >// to search over them> >byte> byteArr[] = {>10>,>20>,>15>,>22>,>35> };> >char> charArr[] = {>'g'>,>'p'>,>'q'>,>'c'>,>'i'> };> >int> intArr[] = {>10>,>20>,>15>,>22>,>35> };> >double> doubleArr[] = {>10.2>,>15.1>,>2.2>,>3.5> };> >float> floatArr[] = {>10>.2f,>15>.1f,>2>.2f,>3>.5f };> >short> shortArr[] = {>10>,>20>,>15>,>22>,>35> };> >// Using sort() method of Arrays class> >// and passing arrays to be sorted as in arguments> >Arrays.sort(byteArr);> >Arrays.sort(charArr);> >Arrays.sort(intArr);> >Arrays.sort(doubleArr);> >Arrays.sort(floatArr);> >Arrays.sort(shortArr);> >// Primitive datatypes> >byte> byteKey =>35>;> >char> charKey =>'g'>;> >int> intKey =>22>;> >double> doubleKey =>1.5>;> >float> floatKey =>35>;> >short> shortKey =>5>;> >// Now in sorted array we will fetch and> >// return elements/indiciesaccessing indexes to show> >// array is really sorted> >// Print commands where we are implementing> >System.out.println(> >byteKey +>' found at index = '> >+ Arrays.binarySearch(byteArr, byteKey));> >System.out.println(> >charKey +>' found at index = '> >+ Arrays.binarySearch(charArr, charKey));> >System.out.println(> >intKey +>' found at index = '> >+ Arrays.binarySearch(intArr, intKey));> >System.out.println(> >doubleKey +>' found at index = '> >+ Arrays.binarySearch(doubleArr, doubleKey));> >System.out.println(> >floatKey +>' found at index = '> >+ Arrays.binarySearch(floatArr, floatKey));> >System.out.println(> >shortKey +>' found at index = '> >+ Arrays.binarySearch(shortArr, shortKey));> >}> }> |
>
>Sortir
35 found at index = 4 g found at index = 1 22 found at index = 3 1.5 found at index = -1 35.0 found at index = -5 5 found at index = -1>
Analyse de complexité :
Complexité temporelle :
La complexité temporelle de la méthode Arrays.binarySearch() est O(log n) où n est la longueur du tableau d'entrée. En effet, la méthode utilise un algorithme de recherche binaire pour trouver l'élément cible dans le tableau trié.
Espace auxiliaire :
L'espace auxiliaire utilisé par la méthode Arrays.binarySearch() est O(1) car il ne nécessite aucun espace supplémentaire autre que le tableau d'entrée pour effectuer l'opération de recherche.
Il existe des variantes de cette méthode dans lesquelles nous pouvons également spécifier la plage de tableau dans laquelle rechercher. Nous en discuterons ainsi que la recherche dans un tableau d'objets dans d'autres articles.
Exemple 2 :
Java
tableau de chaînes c
// Java Program to Illustrate binarySearch() method> // of Collections class> // Importing required classes> import> java.util.ArrayList;> import> java.util.Collections;> import> java.util.List;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Creating empty List> >List al =>new> ArrayList();> >// Adding elements to the List> >al.add(>12>);> >al.add(>53>);> >al.add(>23>);> >al.add(>46>);> >al.add(>54>);> >// Using binarySearch() method of Collections class> >// over random inserted element and storing the> >// index> >int> index = Collections.binarySearch(al,>23>);> >// Print and display the index> >System.out.print(index);> >}> }> |
>
>Sortir
2>
Analyse de complexité :
Complexité temporelle :
La complexité temporelle de la méthode binaireSearch() dans la classe Collections est O(log n) où n est le nombre d'éléments dans la liste.
Espace auxiliaire :
La méthode binaireSearch() de la classe Collections ne nécessite aucun espace supplémentaire et a donc une complexité d'espace auxiliaire de O(1).