Arrays.binarySearch() metode meklē norādītā datu tipa norādītajā masīvā norādīto vērtību, izmantojot bināro meklēšanas algoritmu. Masīvs ir jākārto pēc Arrays.sort() metodi pirms šī zvana veikšanas. Ja tas nav sakārtots, rezultāti nav definēti. Ja masīvā ir vairāki elementi ar norādīto vērtību, nav garantijas, kurš no tiem tiks atrasts. Slīdīsim tālāk sniegtajā ilustrācijā šādi.
Ilustrācija:
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> Tā ir vienkāršākā un efektīvākā metode elementa atrašanai sakārtotā masīvā Java
Sintakse:
public static int binarySearch(data_type arr, data_type key)>
Atcerieties: Šeit datu tips var būt jebkurš no primitīvajiem datu tipiem, piemēram, baits, char, double, int, float, īss, garš un pat objekts.
Parametri:
- Masīvs, kas jāmeklē
- Vērtība, kas jāmeklē
Atgriešanas veids: meklēšanas atslēgas indekss, ja tas ir iekļauts masīvā; pretējā gadījumā (-(ievietošanas punkts) – 1). Ievietošanas punkts ir definēts kā punkts, kurā atslēga tiktu ievietota masīvā: pirmā elementa indekss, kas ir lielāks par atslēgu, vai a.length, ja visi masīva elementi ir mazāki par norādīto atslēgu. Ņemiet vērā, ka tas garantē, ka atgriešanas vērtība būs>= 0, ja un tikai tad, ja tiek atrasta atslēga.
Ir daži svarīgi punkti, kas jāpatur prātā:
- Ja ievades saraksts nav sakārtots, rezultāti nav definēti.
- Ja ir dublikāti, nav garantijas, kurš tiks atrasts.
Kā minēts iepriekš, mēs jau apspriedām, ka mēs varam darboties arī ar šo algoritmu Masīvi.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() darbojas masīviem, kuriem var būt arī primitīvs datu tips. Kolekcijas .binarysearch() darbojas objektiem, piemēram, kolekcijām ArrayList un LinkedList .
1. piemērs:
Java
np.random.rand
// 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));> >}> }> |
>
>Izvade
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>
Sarežģītības analīze:
java masīvu sarakstu kārtošana
Laika sarežģītība:
Metodes Arrays.binarySearch() laika sarežģītība ir O(log n), kur n ir ievades masīva garums. Tas ir tāpēc, ka metode izmanto bināro meklēšanas algoritmu, lai atrastu mērķa elementu sakārtotajā masīvā.
Palīgtelpa:
Metodes Arrays.binarySearch() izmantotā palīgtelpa ir O(1), jo meklēšanas darbības veikšanai nav nepieciešama papildu telpa, izņemot ievades masīvu.
Ir šīs metodes varianti, kuros mēs varam norādīt arī masīva diapazonu, kurā meklēt. Mēs to apspriedīsim, kā arī meklēšanu objektu masīvā turpmākajos ierakstos.
2. piemērs:
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);> >}> }> |
>
>Izvade
2>
Sarežģītības analīze:
Laika sarežģītība:
Metodes binarySearch() laika sarežģītība klasē Collections ir O(log n), kur n ir elementu skaits sarakstā.
1nf 2nf 3nf
Palīgtelpa:
Metodei binarySearch() kolekciju klasē nav nepieciešama papildu vieta, un tādējādi tai ir papildu telpas sarežģītība O(1).