logo

Arrays.binarySearch() v jazyku Java s príkladmi | Set 1

Arrays.binarySearch() metóda vyhľadá v zadanom poli daného dátového typu zadanú hodnotu pomocou binárneho vyhľadávacieho algoritmu. Pole musí byť zoradené podľa Arrays.sort() pred uskutočnením tohto hovoru. Ak nie je zoradené, výsledky sú nedefinované. Ak pole obsahuje viacero prvkov so zadanou hodnotou, nie je zaručené, ktorý z nich sa nájde. Prejdime si nižšie uvedený obrázok nasledovne.

Ilustrácia:

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>

Je to najjednoduchšia a najefektívnejšia metóda na nájdenie prvku v triedenom poli v jazyku Java



Syntax:

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

Pamätajte: Dátovým typom môže byť ktorýkoľvek z primitívnych dátových typov, ako napríklad byte, char, double, int, float, short, long a dokonca aj objekt.

Parametre:

  • Pole, ktoré sa má prehľadávať
  • Hodnota, ktorá sa má hľadať

Typ návratu: index vyhľadávacieho kľúča, ak je obsiahnutý v poli; inak (-(bod vloženia) – 1). Bod vloženia je definovaný ako bod, v ktorom by bol kľúč vložený do poľa: index prvého prvku väčší ako kľúč alebo a.length, ak sú všetky prvky v poli menšie ako zadaný kľúč. Všimnite si, že to zaručuje, že návratová hodnota bude>= 0 vtedy a len vtedy, ak sa nájde kľúč.

Je potrebné mať na pamäti nasledujúce dôležité body:

  • Ak zoznam vstupov nie je zoradený, výsledky sú nedefinované.
  • Ak existujú duplikáty, nie je zaručené, ktorý z nich sa nájde.

Ako je uvedené vyššie, už sme diskutovali o tom, že môžeme prevádzkovať aj tento algoritmus Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() funguje pre polia, ktoré môžu byť tiež primitívneho dátového typu. zbierky .binarysearch() funguje pre objekty ako kolekcie ArrayList a LinkedList .

Príklad 1:

Java

pre každý strojopis




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

>

>

Výkon

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>

Analýza zložitosti:

Časová zložitosť:
Časová zložitosť metódy Arrays.binarySearch() je O(log n), kde n je dĺžka vstupného poľa. Je to preto, že metóda používa binárny vyhľadávací algoritmus na nájdenie cieľového prvku v triedenom poli.

Pomocný priestor:
Pomocný priestor používaný metódou Arrays.binarySearch() je O(1), pretože na vykonanie operácie vyhľadávania nevyžaduje žiadny ďalší priestor okrem vstupného poľa.

Existujú varianty tejto metódy, v ktorých môžeme špecifikovať aj rozsah poľa na vyhľadávanie. O tom, ako aj o vyhľadávaní v poli objektov, budeme diskutovať v ďalších príspevkoch.

Príklad 2:

vytlačiť vzor hviezdy

Java




rýchle triedenie java

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

>

>

Výkon

2>

Analýza zložitosti:

Časová zložitosť:
Časová zložitosť metódy binarySearch() v triede Collections je O(log n), kde n je počet prvkov v zozname.

Pomocný priestor:
Metóda binarySearch() v triede Collections nevyžaduje žiadny priestor navyše, a preto má pomocnú priestorovú zložitosť O(1).