Arrays.binarySearch() metoda prohledává zadané pole daného datového typu pro zadanou hodnotu pomocí binárního vyhledávacího algoritmu. Pole musí být seřazeno podle Arrays.sort() před provedením tohoto volání. Pokud není seřazeno, výsledky jsou nedefinované. Pokud pole obsahuje více prvků se zadanou hodnotou, není zaručeno, který z nich bude nalezen. Projděte níže uvedenou ilustraci následovně.
Ilustrace:
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 nejjednodušší a nejúčinnější metoda, jak v Javě najít prvek v seřazeném poli
Syntax:
public static int binarySearch(data_type arr, data_type key)>
Pamatovat si: Zde může být datovým typem kterýkoli z primitivních datových typů, jako je byte, char, double, int, float, short, long a dokonce i object.
Parametry:
- Pole, které se má prohledat
- Hodnota, která se má hledat
Typ vrácení: index vyhledávacího klíče, pokud je obsažen v poli; jinak (-(místo vložení) – 1). Bod vložení je definován jako bod, ve kterém by byl klíč vložen do pole: index prvního prvku větší než klíč nebo a.length, pokud jsou všechny prvky v poli menší než zadaný klíč. Všimněte si, že to zaručuje, že vrácená hodnota bude>= 0 pouze tehdy, pokud bude klíč nalezen.
Je třeba mít na paměti některé důležité body:
- Pokud není seznam vstupů seřazen, výsledky jsou nedefinované.
- Pokud existují duplikáty, není zaručeno, který z nich bude nalezen.
Jak již bylo uvedeno výše, diskutovali jsme o tom, že můžeme provozovat i tento algoritmus Arrays.binarysearch() vs Collections.binarysearch() . Arrays.binarysearch() funguje pro pole, která mohou být také primitivního datového typu. Sbírky .binarysearch() funguje pro objekty jako jsou kolekce ArrayList a Spojový seznam .
Příklad 1:
Jáva
panda tát
// 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));> >}> }> |
>
seřadit seznam polí
>Výstup
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 složitosti:
Časová náročnost:
Časová složitost metody Arrays.binarySearch() je O(log n), kde n je délka vstupního pole. Je to proto, že metoda používá binární vyhledávací algoritmus k nalezení cílového prvku v seřazeném poli.
Pomocný prostor:
Pomocný prostor používaný metodou Arrays.binarySearch() je O(1), protože k provedení operace vyhledávání nevyžaduje žádný další prostor kromě vstupního pole.
Existují varianty této metody, ve kterých můžeme také specifikovat rozsah pole, ve kterém se má prohledávat. O tom, stejně jako o hledání v poli Object, budeme diskutovat v dalších příspěvcích.
Příklad 2:
Jáva
// 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);> >}> }> |
>
>
historie verzí androiduVýstup
2>
Analýza složitosti:
Časová náročnost:
Časová složitost metody binarySearch() ve třídě Collections je O(log n), kde n je počet prvků v seznamu.
Pomocný prostor:
Metoda binarySearch() ve třídě Collections nevyžaduje žádný prostor navíc a má tedy pomocnou prostorovou složitost O(1).