logo

Arrays.binarySearch() i Java med eksempler | Sett 1

Arrays.binarySearch() metoden søker i den spesifiserte matrisen for den gitte datatypen etter den angitte verdien ved å bruke den binære søkealgoritmen. Matrisen må sorteres etter Arrays.sort() metode før du foretar denne samtalen. Hvis det ikke er sortert, er resultatene udefinerte. Hvis matrisen inneholder flere elementer med den angitte verdien, er det ingen garanti for hvilken som vil bli funnet. La oss gli gjennom illustrasjonen nedenfor som følger.

Illustrasjon:



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 metoden for å finne et element i en sortert matrise i Java

Syntaks:

public static int binarySearch(data_type arr, data_type key)>

Huske: Her kan datatype være hvilken som helst av de primitive datatypene som byte, char, double, int, float, short, long og even object.



Parametere:

  • Matrisen som skal søkes i
  • Verdien som skal søkes etter

Returtype: indeksen til søkenøkkelen, hvis den finnes i matrisen; ellers, (-(innsettingspunkt) – 1). Innsettingspunktet er definert som punktet der nøkkelen vil bli satt inn i matrisen: indeksen til det første elementet større enn nøkkelen, eller a.length hvis alle elementene i matrisen er mindre enn den spesifiserte nøkkelen. Merk at dette garanterer at returverdien vil være>= 0 hvis og bare hvis nøkkelen blir funnet.

Det er visse viktige punkter å huske på som følger:



  • Hvis inndatalisten ikke er sortert, er resultatene udefinerte.
  • Hvis det er duplikater, er det ingen garanti for hvilken som blir funnet.

Som ovenfor har vi allerede diskutert at vi kan bruke denne algoritmen heller Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() fungerer for matriser som også kan være av primitiv datatype. Samlinger .binarysearch() fungerer for objekter som samlinger som ArrayList og LinkedList .

Eksempel 1:

Java

legge til en matrise 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));> >}> }>

>

>

Produksjon

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 til Arrays.binarySearch()-metoden er O(log n) der n er lengden på inngangsmatrisen. Dette er fordi metoden bruker binær søkealgoritme for å finne målelementet i den sorterte matrisen.

Hjelpeplass:
Hjelpeplassen som brukes av Arrays.binarySearch()-metoden er O(1) siden den ikke krever noe ekstra plass annet enn input-arrayen for å utføre søkeoperasjonen.

Det finnes varianter av denne metoden der vi også kan spesifisere rekkevidden av array å søke i. Vi vil diskutere det i tillegg til å søke i en Object array i flere innlegg.

Eksempel 2:

Java




hva 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);> >}> }>

>

>

Produksjon

2>

Kompleksitetsanalyse:

Tidskompleksitet:
Tidskompleksiteten til binarySearch()-metoden i klassen Samlinger er O(log n) der n er antall elementer i listen.

Hjelpeplass:
BinarySearch()-metoden i Collections-klassen krever ingen ekstra plass og har dermed en hjelperomskompleksitet på O(1).