-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathbinary_search.py
69 lines (53 loc) · 1.96 KB
/
binary_search.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""
In binary search we take a sorted list of elements and start looking for an element at the middle of the list.
If the search value matches with the middle value in the list we complete the search.
Otherwise we eleminate half of the list of elements by choosing whether to procees with the right or left half of the list depending on the value of the item searched.
This is possible as the list is sorted and it is much quicker than linear search.
Here we divide the given list and conquer by choosing the proper half of the list.
We repeat this approach till we find the element or conclude about it's absence in the list.
"""
# Recursive Implemetation
# Returns index of x in arr if present, else -1
def binarySearchRec(arr, l, r, x):
# Check base case
if r >= l:
mid = l + (r - l) / 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 binarySearchRec(arr, l, mid - 1, x)
# Else the element can only be present
# in right subarray
else:
return binarySearchRec(arr, mid + 1, r, x)
else:
# Element is not present in the array
return -1
# Iterative
def binarySearchIt(arr, l, r, x):
while l <= r:
mid = l + (r - l) / 2
# Check if x is present at mid
if arr[mid] == x:
return mid
# If x is greater, ignore left half
elif arr[mid] < x:
l = mid + 1
# If x is smaller, ignore right half
else:
r = mid - 1
# 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 = binarySearchRec(arr, 0, len(arr) - 1, x)
if result != -1:
print("Element is present at index % d" % result)
else:
print("Element is not present in array")