Arrays.binarySearch() metoda išče podano matriko danega podatkovnega tipa za podano vrednost z algoritmom binarnega iskanja. Niz mora biti razvrščen kot po Arrays.sort() pred izvedbo tega klica. Če ni razvrščen, so rezultati nedefinirani. Če matrika vsebuje več elementov z navedeno vrednostjo, ni nobenega zagotovila, kateri bo najden. Pojdimo skozi spodnjo ilustracijo, kot sledi.
Ilustracija:
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> To je najenostavnejša in najučinkovitejša metoda za iskanje elementa v razvrščeni matriki v Javi
Sintaksa:
public static int binarySearch(data_type arr, data_type key)>
Ne pozabite: Tu je podatkovni tip lahko kateri koli od primitivnih podatkovnih tipov, kot so byte, char, double, int, float, short, long in celo object.
Parametri:
- Matrika za iskanje
- Vrednost, ki jo je treba iskati
Vrsta vračila: indeks iskalnega ključa, če je vsebovan v matriki; drugače, (-(točka vstavljanja) – 1). Točka vstavljanja je definirana kot točka, na kateri bi bil ključ vstavljen v matriko: indeks prvega elementa, ki je večji od ključa, ali a.length, če so vsi elementi v matriki manjši od podanega ključa. Upoštevajte, da to zagotavlja, da bo vrnjena vrednost>= 0, če in samo če je ključ najden.
Upoštevati je treba nekatere pomembne točke:
- Če seznam vnosov ni razvrščen, so rezultati nedefinirani.
- Če obstajajo dvojniki, ni nobenega zagotovila, kateri bo najden.
Kot zgoraj smo že razpravljali, da lahko upravljamo tudi ta algoritem Arrays.binarysearch() vs Zbirke.binarysearch() . Arrays.binarysearch() deluje za nize, ki so lahko tudi primitivnega podatkovnega tipa. Zbirke .binarysearch() deluje za predmete, kot so zbirke ArrayList in LinkedList .
Primer 1:
Java
iteracija skozi map java
// 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));> >}> }> |
avl rotacija drevesa
>
>Izhod
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>
Analiza kompleksnosti:
Časovna zapletenost:
Časovna kompleksnost metode Arrays.binarySearch() je O(log n), kjer je n dolžina vhodne matrike. To je zato, ker metoda uporablja algoritem binarnega iskanja za iskanje ciljnega elementa v razvrščeni matriki.
Pomožni prostor:
Pomožni prostor, ki ga uporablja metoda Arrays.binarySearch(), je O(1), saj za izvedbo iskalne operacije ne potrebuje nobenega dodatnega prostora razen vhodne matrike.
Obstajajo različice te metode, v katerih lahko določimo tudi obseg matrike za iskanje. O tem in iskanju v matriki Object bomo razpravljali v naslednjih objavah.
Primer 2:
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);> >}> }> |
>
virtualni pomnilnik
>Izhod
2>
Analiza kompleksnosti:
Časovna zapletenost:
Časovna kompleksnost metode binarySearch() v razredu Collections je O(log n), kjer je n število elementov na seznamu.
Pomožni prostor:
Metoda binarySearch() v razredu Collections ne zahteva nobenega dodatnega prostora in ima zato kompleksnost pomožnega prostora O(1).