In een notendop maakt dit zoekalgoritme gebruik van een verzameling elementen die al gesorteerd is door na slechts één vergelijking de helft van de elementen te negeren.
- Vergelijk x met het middelste element.
- Als x overeenkomt met het middelste element, retourneren we de middenindex.
- Anders, als x groter is dan het middenelement, kan x alleen in de rechter (grotere) halve subarray na het middenelement liggen. Vervolgens passen we het algoritme opnieuw toe voor de rechterhelft.
- Anders, als x kleiner is, moet het doel x in de linker (onderste) helft liggen. Dus passen we het algoritme toe voor de linkerhelft.
Python-programma voor binair zoeken met behulp van recursief
Python3
# Python 3 program for recursive binary search.> # Modifications needed for the older Python 2 are found in comments.> # Returns index of x in arr if present, else -1> def> binary_search(arr, low, high, x):> ># Check base case> >if> high>>=> low:> >mid>=> (high>+> low)>/>/> 2> ># If 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> >elif> arr[mid]>x:> >return> binary_search(arr, low, mid>-> 1>, x)> ># Else the element can only be present in right subarray> >else>:> >return> binary_search(arr, mid>+> 1>, high, x)> >else>:> ># Element is not present in the array> >return> ->1> # Test array> arr>=> [>2>,>3>,>4>,>10>,>40> ]> x>=> 10> # Function call> result>=> binary_search(arr,>0>,>len>(arr)>->1>, x)> if> result !>=> ->1>:> >print>(>'Element is present at index'>,>str>(result))> else>:> >print>(>'Element is not present in array'>)> |
>
wat is obj in java
>Uitvoer
Element is present at index 3>
Tijdcomplexiteit : O(log n)
Hulpruimte : O(logn) [OPMERKING: Recursie creëert call-stack]
Python-programma voor binair zoeken met behulp van iteratief
Python3
partiële afgeleide van latex
# Iterative Binary Search Function> # It returns index of x in given array arr if present,> # else returns -1> def> binary_search(arr, x):> >low>=> 0> >high>=> len>(arr)>-> 1> >mid>=> 0> >while> low <>=> high:> >mid>=> (high>+> low)>/>/> 2> ># If x is greater, ignore left half> >if> arr[mid] low = mid + 1 # If x is smaller, ignore right half elif arr[mid]>x: high = mid - 1 # betekent dat x midden aanwezig is anders: return mid # Als we hier komen, dan was het element niet aanwezig return -1 # Testarray arr = [ 2, 3, 4, 10, 40 ] x = 10 # Functieaanroep resultaat = binary_search(arr, x) if resultaat != -1: print('Element is aanwezig in index', str(resultaat)) else: print('Element is niet aanwezig in array ')> |
>
>Uitvoer
Element is present at index 3>
Tijdcomplexiteit : O(log n)
Hulpruimte : O(1)
Python-programma voor binair zoeken met behulp van de ingebouwde bisect-module
Stap voor stap aanpak:
palindroom in Java
- De code importeert de bisect-module die ondersteuning biedt voor binair zoeken.
- De functie binary_search_bisect() is gedefinieerd, waarbij een array arr en het element om x te zoeken als invoer nodig zijn.
- De functie roept de functie bisect_left() van de bisect-module aan, die de positie van het element in de gesorteerde array arr vindt, waar x moet worden ingevoegd om de gesorteerde volgorde te behouden. Als het element al in de array aanwezig is, retourneert deze functie zijn positie.
- De functie controleert vervolgens of de geretourneerde index i binnen het bereik van de array ligt en of het element bij die index gelijk is aan x.
- Als de voorwaarde waar is, retourneert de functie de index i als de positie van het element in de array.
- Als de voorwaarde onwaar is, retourneert de functie -1, wat aangeeft dat het element niet aanwezig is in de array.
- De code definieert vervolgens een array arr en een element x om te zoeken.
- De functie binary_search_bisect() wordt aangeroepen met arr en x als invoer en het geretourneerde resultaat wordt opgeslagen in de resultaatvariabele.
- De code controleert vervolgens of het resultaat niet gelijk is aan -1, wat aangeeft dat het element aanwezig is in de array. Indien waar, wordt de positie van het element in de array afgedrukt.
- Als het resultaat gelijk is aan -1, drukt de code een bericht af dat het element niet aanwezig is in de array.
Python3
array in Java
import> bisect> > def> binary_search_bisect(arr, x):> >i>=> bisect.bisect_left(arr, x)> >if> i !>=> len>(arr)>and> arr[i]>=>=> x:> >return> i> >else>:> >return> ->1> > > # Test array> arr>=> [>2>,>3>,>4>,>10>,>40>]> x>=> 10> > # Function call> result>=> binary_search_bisect(arr, x)> > if> result !>=> ->1>:> >print>(>'Element is present at index'>,>str>(result))> else>:> >print>(>'Element is not present in array'>)> |
>
>Uitvoer
Element is present at index 3>
Tijdcomplexiteit : O(log n)
Hulpruimte : O(1)