Arrays.binarySearch() metoden søger i det angivne array af den givne datatype for den angivne værdi ved hjælp af den binære søgealgoritme. Arrayet skal sorteres efter Arrays.sort() metode, før du foretager dette opkald. Hvis det ikke er sorteret, er resultaterne udefinerede. Hvis arrayet indeholder flere elementer med den angivne værdi, er der ingen garanti for, hvilken der bliver fundet. Lad os glide gennem illustrationen nedenfor som følger.
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> Det er den enkleste og mest effektive metode til at finde et element i et sorteret array i Java
Syntaks:
public static int binarySearch(data_type arr, data_type key)>
Husk: Her kan datatype også være enhver af de primitive datatyper såsom byte, char, double, int, float, short, long og endda objekt.
Parametre:
- Det array, der skal søges i
- Værdien, der skal søges efter
Returtype: indeks for søgenøglen, hvis den er indeholdt i arrayet; ellers (-(indsættelsespunkt) – 1). Indsættelsespunktet er defineret som det punkt, hvor nøglen vil blive indsat i arrayet: indekset for det første element, der er større end nøglen, eller a.length, hvis alle elementer i arrayet er mindre end den specificerede nøgle. Bemærk, at dette garanterer, at returværdien vil være>= 0, hvis og kun hvis nøglen findes.
Der er visse vigtige punkter, der skal huskes som følger:
- Hvis inputlisten ikke er sorteret, er resultaterne udefinerede.
- Hvis der er dubletter, er der ingen garanti for, hvilken der bliver fundet.
Som ovenfor har vi allerede diskuteret, at vi enten kan betjene denne algoritme Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() virker for arrays, som også kan være af primitiv datatype. Samlinger .binarysearch() virker for objekter som samlinger ArrayList og LinkedList .
Eksempel 1:
Java
tilføje til et array i java
s i python
// 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));> >}> }> |
>
>Produktion
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>
Kompleksitetsanalyse:
Tidskompleksitet:
Tidskompleksiteten af Arrays.binarySearch()-metoden er O(log n), hvor n er længden af input-arrayet. Dette skyldes, at metoden bruger binær søgealgoritme til at finde målelementet i det sorterede array.
Hjælpeplads:
Hjælperummet, der bruges af Arrays.binarySearch()-metoden, er O(1), da det ikke kræver noget ekstra mellemrum end input-arrayet for at udføre søgeoperationen.
Der er varianter af denne metode, hvor vi også kan specificere rækkevidden af array, der skal søges i. Vi vil diskutere det såvel som at søge i en Object array i yderligere indlæg.
Eksempel 2:
Java
hvad er eksport i linux
// 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);> >}> }> |
>
>Produktion
2>
Kompleksitetsanalyse:
Tidskompleksitet:
Tidskompleksiteten af binarySearch()-metoden i klassen Collections er O(log n), hvor n er antallet af elementer på listen.
Hjælpeplads:
BinarySearch()-metoden i klassen Collections kræver ikke noget ekstra mellemrum og har derfor en ekstra pladskompleksitet på O(1).