Skip to content

Commit bd67dcf

Browse files
Merge pull request TheAlgorithms#96 from ZivLi/Add-bin-search-algorithm-by-recursion
Add bin-search implement by recursion
2 parents d4d56a6 + 23ac6bc commit bd67dcf

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

searches/binary_search.py

+33
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,39 @@ def binary_search_std_lib(sorted_collection, item):
8080
return index
8181
return None
8282

83+
def binary_search_by_recursion(sorted_collection, item, left, right):
84+
85+
"""Pure implementation of binary search algorithm in Python by recursion
86+
87+
Be careful collection must be sorted, otherwise result will be
88+
unpredictable
89+
First recursion should be started with left=0 and right=(len(sorted_collection)-1)
90+
91+
:param sorted_collection: some sorted collection with comparable items
92+
:param item: item value to search
93+
:return: index of found item or None if item is not found
94+
95+
Examples:
96+
>>> binary_search_std_lib([0, 5, 7, 10, 15], 0)
97+
0
98+
99+
>>> binary_search_std_lib([0, 5, 7, 10, 15], 15)
100+
4
101+
102+
>>> binary_search_std_lib([0, 5, 7, 10, 15], 5)
103+
1
104+
105+
>>> binary_search_std_lib([0, 5, 7, 10, 15], 6)
106+
107+
"""
108+
midpoint = left + (right - left) // 2
109+
110+
if sorted_collection[midpoint] == item:
111+
return midpoint
112+
elif sorted_collection[midpoint] > item:
113+
return binary_search_by_recursion(sorted_collection, item, left, right-1)
114+
else:
115+
return binary_search_by_recursion(sorted_collection, item, left+1, right)
83116

84117
def __assert_sorted(collection):
85118
"""Check if collection is sorted, if not - raises :py:class:`ValueError`

0 commit comments

Comments
 (0)