Updated Circular-Search w/ README
This commit is contained in:
51
Circular-Search/cs412_circular_sort_search.py
Normal file
51
Circular-Search/cs412_circular_sort_search.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""
|
||||
name: Nicholas Tamassia
|
||||
|
||||
Honor Code and Acknowledgments:
|
||||
|
||||
This work complies with the JMU Honor Code.
|
||||
|
||||
Comments here on your code and submission.
|
||||
"""
|
||||
|
||||
|
||||
def circular_search(in_list: list[int], search_item: int) -> int:
|
||||
|
||||
# * Nest the recursive function to hide the start-end indexing
|
||||
# * from end user, which could introduce bad input (e.g. start > end)
|
||||
# * It also means we don't have to keep passing in_list and search_term over and over again.
|
||||
def recurse(start: int, end: int) -> int:
|
||||
if end - start == 0:
|
||||
return -1
|
||||
if end - start == 1:
|
||||
return start if in_list[start] == search_item else -1
|
||||
|
||||
mid: int = (start + end) // 2
|
||||
|
||||
if in_list[start] <= in_list[mid - 1]:
|
||||
if in_list[start] <= search_item and search_item <= in_list[mid - 1]:
|
||||
return recurse(start, mid)
|
||||
else:
|
||||
return recurse(mid, end)
|
||||
else:
|
||||
if in_list[mid] <= search_item and search_item <= in_list[end - 1]:
|
||||
return recurse(mid, end)
|
||||
else:
|
||||
return recurse(start, mid)
|
||||
|
||||
return recurse(0, len(in_list))
|
||||
|
||||
|
||||
def main():
|
||||
# your code here
|
||||
|
||||
in_list: list[int] = list(map(int, input().split()))
|
||||
search_item: int = int(input())
|
||||
|
||||
index = circular_search(in_list, search_item)
|
||||
|
||||
print(index)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user