Binární vyhledávání je jednou z vyhledávacích technik používaných při třídění vstupu. Zde se zaměřujeme na nalezení prostředního prvku, který funguje jako referenční rámec, zda k němu jít doleva nebo doprava, protože prvky jsou již seřazeny. Toto vyhledávání pomáhá při optimalizaci vyhledávací techniky při každé iteraci se nazývá binární vyhledávání a čtenáři si na něj kladou důraz, protože se nepřímo používá při řešení otázek.

Binární vyhledávací algoritmus v Javě
Níže je uveden algoritmus navržený pro binární vyhledávání:
- Start
- Vezměte vstupní pole a cíl
- Inicializovat začátek = 0 a konec = (velikost pole -1)
- Indianize střední proměnná
- střední = (začátek+konec)/2
- if array[ mid ] == target then return mid
- if pole[ mid]
- if array[ mid ]> target then end = mid-1
- pokud začátek<=konec, přejděte na krok 5
- návrat -1 jako Nenalezen prvek
- Výstup
Nyní musíte přemýšlet o tom, co když vstup není seřazen, výsledky jsou nedefinované.
Poznámka: Pokud existují duplikáty, není zaručeno, který z nich bude nalezen.
Metody pro Java Binary Search
V Javě jsou tři způsoby implementace Binární vyhledávání v Javě jsou uvedeny níže:
- Iterativní metoda
- Rekurzivní metoda
- Vestavěná metoda
1. Iterativní metoda pro binární vyhledávání v Javě
Níže je implementace zmíněna níže:
Jáva
// Java implementation of iterative Binary Search> class> BinarySearch {> >// Returns index of x if it is present in arr[l....r], else return -1> >int> binarySearch(>int> arr[],>int> l,>int> r,>int> x)> >{> >while> (l <= r) {> >int> mid = (l + r) />2>;> >// If the element is present at the> >// middle itself> >if> (arr[mid] == x) {> >return> mid;> >// If element is smaller than mid, then> >// it can only be present in left subarray> >// so we decrease our r pointer to mid - 1> >}>else> if> (arr[mid]>x) {> >r = mid ->1>;> >// Else the element can only be present> >// in right subarray> >// so we increase our l pointer to mid + 1> >}>else> {> >l = mid +>1>;> >}> >}> >// We reach here when element is not present> >// in array> >return> ->1>;> >}> >// Driver method to test above> >public> static> void> main(String args[])> >{> >BinarySearch ob =>new> BinarySearch();> >int> arr[] = {>2>,>3>,>4>,>10>,>40> };> >int> n = arr.length;> >int> x =>10>;> >int> result = ob.binarySearch(arr,>0>, n ->1>, x);> >if> (result == ->1>)> >System.out.println(>'Element not present'>);> >else> >System.out.println(>'Element found at index '> >+ result);> >}> }> |
>
>Výstup
napište json do souboru python
Element found at index 3>
Spropitné: Geekové vás jistě zajímá, zda existuje nějaká funkce jako dolní_mez() nebo horní hranice() pravděpodobně nalezený v C++ STL. takže přímá odpověď je, že žádná funkce neexistovala pouze do Java 9, později byly přidány.
2. Rekurzivní metoda pro binární vyhledávání
Níže je uvedena implementace výše uvedené metody:
Jáva
// Java implementation of> // recursive Binary Search> // Driver Class> class> BinarySearch {> >// Returns index of x if it is present in arr[l..> >// r], else return -1> >int> binarySearch(>int> arr[],>int> l,>int> r,>int> x)> >{> >if> (r>= l) {> >int> mid = l + (r - l) />2>;> >// If the element is present at the> >// middle itself> >if> (arr[mid] == x)> >return> mid;> >// If element is smaller than mid, then> >// it can only be present in left subarray> >if> (arr[mid]>x)> >return> binarySearch(arr, l, mid ->1>, x);> >// Else the element can only be present> >// in right subarray> >return> binarySearch(arr, mid +>1>, r, x);> >}> >// We reach here when element is not present> >// in array> >return> ->1>;> >}> >// main function> >public> static> void> main(String args[])> >{> >BinarySearch ob =>new> BinarySearch();> >int> arr[] = {>2>,>3>,>4>,>10>,>40> };> >int> n = arr.length;> >int> x =>10>;> >int> result = ob.binarySearch(arr,>0>, n ->1>, x);> >if> (result == ->1>)> >System.out.println(> >'Element is not present in array'>);> >else> >System.out.println(> >'Element is present at index '> + result);> >}> }> |
>
>Výstup
Element is present at index 3>
Složitost výše uvedené metody
Časová náročnost: O (log N)
Prostorová složitost: O(1), Pokud je uvažován zásobník rekurzivních volání, bude pomocný prostor O(log N)
3. V Build Method pro binární vyhledávání v Javě
Arrays.binarysearch() funguje pro pole, která mohou být také primitivního datového typu.
Níže je uvedena implementace výše uvedené metody:
Jáva
// Java Program to demonstrate working of binarySearch()> // Method of Arrays class In a sorted array> // Importing required classes> import> java.util.Arrays;> // Main class> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Declaring an integer array> >int> arr[] = {>10>,>20>,>15>,>22>,>35> };> >// Sorting the above array> >// using sort() method of Arrays class> >Arrays.sort(arr);> >int> key =>22>;> >int> res = Arrays.binarySearch(arr, key);> >if> (res>=>0>)> >System.out.println(> >key +>' found at index = '> + res);> >else> >System.out.println(key +>' Not found'>);> >key =>40>;> >res = Arrays.binarySearch(arr, key);> >if> (res>=>0>)> >System.out.println(> >key +>' found at index = '> + res);> >else> >System.out.println(key +>' Not found'>);> >}> }> |
>
>Výstup
22 found at index = 3 40 Not found>
Binární vyhledávání v kolekcích Java
Nyní se podívejme, jak Collections.binarySearch() funguje pro LinkedList. Takže v zásadě, jak je uvedeno výše, tato metoda běží v log(n) čase pro seznam s náhodným přístupem, jako je ArrayList. Pokud zadaný seznam neimplementuje rozhraní RandomAccess a je velký, tato metoda provede binární vyhledávání založené na iterátoru, které provádí O(n) procházení odkazů a porovnání prvků O(log n).
Collections.binarysearch() funguje pro objekty Kolekce jako ArrayList a Spojový seznam .
Níže je uvedena implementace výše uvedené metody:
Jáva
// Java Program to Demonstrate Working of 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 an empty ArrayList of integer type> >List al =>new> ArrayList();> >// Populating the Arraylist> >al.add(>1>);> >al.add(>2>);> >al.add(>3>);> >al.add(>10>);> >al.add(>20>);> >// 10 is present at index 3> >int> key =>10>;> >int> res = Collections.binarySearch(al, key);> >if> (res>=>0>)> >System.out.println(> >key +>' found at index = '> + res);> >else> >System.out.println(key +>' Not found'>);> >key =>15>;> >res = Collections.binarySearch(al, key);> >if> (res>=>0>)> >System.out.println(> >key +>' found at index = '> + res);> >else> >System.out.println(key +>' Not found'>);> >}> }> |
>
>Výstup
10 found at index = 3 15 Not found>
Složitost výše uvedené metody
Časová složitost : O (log N)
Pomocný prostor : O(1)