Open In App

Python Program for Binary Search (Recursive and Iterative)

Last Updated : 28 Aug, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

In a nutshell, this search algorithm takes advantage of a collection of elements that is already sorted by ignoring half of the elements after just one comparison. 

  1. Compare x with the middle element.
  2. If x matches with the middle element, we return the mid index.
  3. Else if x is greater than the mid element, then x can only lie in the right (greater) half subarray after the mid element. Then we apply the algorithm again for the right half.
  4. Else if x is smaller, the target x must lie in the left (lower) half. So we apply the algorithm for the left half.

Python Program for Binary Search Using Recursive

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")


Output

Element is present at index 3

Time Complexity: O(log n)

Auxiliary Space: O(logn)     [NOTE: Recursion creates Call Stack]

Python Program for Binary Search Using Iterative 

Python3




# 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] < x:
            low = mid + 1
 
        # If x is smaller, ignore right half
        elif arr[mid] > x:
            high = mid - 1
 
        # means x is present at mid
        else:
            return mid
 
    # If we reach here, then the element was not present
    return -1
 
 
# Test array
arr = [ 2, 3, 4, 10, 40 ]
x = 10
 
# Function call
result = binary_search(arr, x)
 
if result != -1:
    print("Element is present at index", str(result))
else:
    print("Element is not present in array")


Output

Element is present at index 3

Time Complexity: O(log n)

Auxiliary Space: O(1)

Python Program for Binary Search Using the built-in bisect module

Step by step approach:

  • The code imports the bisect module which provides support for binary searching.
  • The binary_search_bisect() function is defined which takes an array arr and the element to search x as inputs.
  • The function calls the bisect_left() function of the bisect module which finds the position of the element in the sorted array arr where x should be inserted to maintain the sorted order. If the element is already present in the array, this function will return its position.
  • The function then checks if the returned index i is within the range of the array and if the element at that index is equal to x.
  • If the condition is true, then the function returns the index i as the position of the element in the array.
  • If the condition is false, then the function returns -1 indicating that the element is not present in the array.
  • The code then defines an array arr and an element x to search.
  • The binary_search_bisect() function is called with arr and x as inputs and the returned result is stored in the result variable.
  • The code then checks if the result is not equal to -1, indicating that the element is present in the array. If true, it prints the position of the element in the array.
  • If the result is equal to -1, then the code prints a message that the element is not present in the array.

Python3




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")


Output

Element is present at index 3

Time Complexity: O(log n)

Auxiliary Space: O(1)
 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads