Arrays.binarySearch() v Javi s primeri | Komplet 1
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
// 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));> > }> }> |
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);> > }> }> |
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).