View Discussion
Improve Article
Save Article
View Discussion
Improve Article
Save Article
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
def
binary_search[arr, low, high, x]:
if
high >
=
low:
mid
=
[high
+
low]
/
/
2
if
arr[mid]
=
=
x:
return
mid
elif
arr[mid] > x:
return
binary_search[arr, low, mid
-
1
, x]
else
:
return
binary_search[arr, mid
+
1
, high, x]
else
:
return
-
1
arr
=
[
2
,
3
,
4
,
10
,
40
]
x
=
10
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]
Iterative:
Python3
def
binary_search[arr, x]:
low
=
0
high
=
len
[arr]
-
1
mid
=
0
while
low x:
high
=
mid
-
1
else
:
return
mid
return
-
1
arr
=
[
2
,
3
,
4
,
10
,
40
]
x
=
10
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]
Please refer to the article Binary Search for more
details!