Arrays.binarySearch() El mètode cerca el valor especificat a la matriu especificada del tipus de dades donat mitjançant l'algorisme de cerca binària. La matriu s'ha d'ordenar com per Arrays.sort() mètode abans de fer aquesta trucada. Si no s'ordena, els resultats no estan definits. Si la matriu conté diversos elements amb el valor especificat, no hi ha cap garantia de quin es trobarà. Anem a lliscar la il·lustració que es mostra a continuació de la següent manera.
Il·lustració:
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> És el mètode més senzill i eficient per trobar un element en una matriu ordenada a Java
Sintaxi:
public static int binarySearch(data_type arr, data_type key)>
Recordeu: Aquí el tipus de dades pot ser qualsevol dels tipus de dades primitius, com ara byte, char, double, int, float, short, long i fins i tot object.
Paràmetres:
- La matriu a cercar
- El valor a cercar
Tipus de retorn: índex de la clau de cerca, si està continguda a la matriu; en cas contrari, (-(punt d'inserció) – 1). El punt d'inserció es defineix com el punt en què la clau s'inseriria a la matriu: l'índex del primer element més gran que la clau, o a.length si tots els elements de la matriu són inferiors a la clau especificada. Tingueu en compte que això garanteix que el valor de retorn serà>= 0 si i només si es troba la clau.
Hi ha alguns punts importants que cal tenir en compte de la següent manera:
- Si la llista d'entrada no està ordenada, els resultats no estan definits.
- Si hi ha duplicats, no hi ha cap garantia de quin es trobarà.
Com més amunt, ja hem comentat que també podem operar aquest algorisme Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() funciona per a matrius que també poden ser de tipus de dades primitives. Col·leccions .binarysearch() funciona per a objectes com Col·leccions ArrayList i LinkedList .
Exemple 1:
Java
entrada de l'usuari java
objecte java a json
// 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));> >}> }> |
>
>Sortida
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>
Anàlisi de complexitat:
Complexitat temporal:
La complexitat temporal del mètode Arrays.binarySearch() és O(log n) on n és la longitud de la matriu d'entrada. Això es deu al fet que el mètode utilitza un algorisme de cerca binari per trobar l'element objectiu a la matriu ordenada.
Espai auxiliar:
L'espai auxiliar utilitzat pel mètode Arrays.binarySearch() és O(1), ja que no requereix cap espai addicional que no sigui la matriu d'entrada per dur a terme l'operació de cerca.
Hi ha variants d'aquest mètode en què també podem especificar l'interval de matriu per cercar. En parlarem d'això, així com de cercar en una matriu d'objectes en publicacions posteriors.
Exemple 2:
Java
1nf 2nf 3nf
// 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);> >}> }> |
>
>Sortida
2>
Anàlisi de complexitat:
Complexitat temporal:
La complexitat temporal del mètode binarySearch() a la classe Col·leccions és O(log n) on n és el nombre d'elements de la llista.
Espai auxiliar:
El mètode binarySearch() de la classe Collections no requereix cap espai addicional i, per tant, té una complexitat d'espai auxiliar de O(1).