Open In App
Related Articles
• Write an Interview Experience
• Python Programs

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.

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]

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)