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.

- Compare x with the middle element.
- If x matches with the middle element, we return the mid index.
- 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.
- 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 :**

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

**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

Please refer to the article *Binary Search* for more details!