Python Program for Binary Search (Recursive and Iterative)

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.


Recursive :

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

Element is present at index 3

Iterative:

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
  
        # Check if x is present at mid
        if arr[mid] < x:
            low = mid + 1
  
        # If x is greater, ignore left half
        elif arr[mid] > x:
            high = mid - 1
  
        # If x is smaller, ignore right half
        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")

chevron_right


Output:

Element is present at index 3

Please refer to the article Binary Search for more details!




My Personal Notes arrow_drop_up

Article Tags :

8


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.