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

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Previous
Next