Arrays.binarySearch() metodas ieško nurodytos vertės nurodyto duomenų tipo masyve, naudodamas dvejetainį paieškos algoritmą. Masyvas turi būti surūšiuotas pagal Arrays.sort() metodą prieš skambinant. Jei jis nerūšiuojamas, rezultatai neapibrėžiami. Jei masyve yra keli elementai su nurodyta verte, nėra garantijos, kuris iš jų bus rastas. Peržvelkime toliau pateiktą iliustraciją taip.
Iliustracija:
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> Tai paprasčiausias ir efektyviausias būdas rasti elementą surūšiuotame Java masyve
Sintaksė:
public static int binarySearch(data_type arr, data_type key)>
Prisiminti: Čia duomenų tipas gali būti bet kuris iš primityvių duomenų tipų, tokių kaip baitas, char, double, int, float, short, long ir net objektas.
Parametrai:
- Masyvas, kurio reikia ieškoti
- Reikšmė, kurios reikia ieškoti
Grąžinimo tipas: paieškos rakto indeksas, jei jis yra masyve; kitu atveju (-(įterpimo taškas) – 1). Įterpimo taškas apibrėžiamas kaip taškas, kuriame raktas būtų įterpiamas į masyvą: pirmojo elemento indeksas, didesnis už raktą, arba a.ilgis, jei visi masyvo elementai yra mažesni už nurodytą raktą. Atminkite, kad tai garantuoja, kad grąžinimo reikšmė bus>= 0, jei ir tik raktas bus rastas.
Yra keletas svarbių dalykų, kuriuos reikia atsiminti:
- Jei įvesties sąrašas nesurūšiuotas, rezultatai neapibrėžti.
- Jei yra dublikatų, nėra garantijos, kuris iš jų bus rastas.
Kaip jau minėjome, galime naudoti ir šį algoritmą Masyvai.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() veikia masyvams, kurie taip pat gali būti primityvaus tipo duomenų. Kolekcijos .binarysearch() veikia objektams Kolekcijos kaip ArrayList ir LinkedList .
1 pavyzdys:
Java
Salman Khan Khan amžius
// 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));> >}> }> |
>
>Išvestis
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>
Sudėtingumo analizė:
Laiko sudėtingumas:
Metodo Arrays.binarySearch() laiko sudėtingumas yra O(log n), kur n yra įvesties masyvo ilgis. Taip yra todėl, kad metodas naudoja dvejetainį paieškos algoritmą, kad surastų tikslinį elementą surūšiuotame masyve.
Pagalbinė erdvė:
Pagalbinė erdvė, naudojama Arrays.binarySearch() metodu, yra O(1), nes paieškos operacijai atlikti nereikia jokios papildomos vietos, išskyrus įvesties masyvą.
Yra šio metodo variantų, kuriuose taip pat galime nurodyti masyvo diapazoną, kuriame reikia ieškoti. Apie tai, kaip ir apie paiešką objektų masyve, kalbėsime kituose pranešimuose.
yra poeilutė java
2 pavyzdys:
Java
Java sąrašo metodai
// 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);> >}> }> |
>
>Išvestis
2>
Sudėtingumo analizė:
Laiko sudėtingumas:
BinarySearch() metodo sudėtingumas kolekcijų klasėje yra O(log n), kur n yra elementų skaičius sąraše.
Pagalbinė erdvė:
BinarySearch() metodas kolekcijų klasėje nereikalauja papildomos vietos, todėl jo pagalbinės erdvės sudėtingumas yra O(1).