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

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

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

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.