# search
# Linear and binary search (loop and recursion) and their benchmark!
class Search():
def linear_serch(self, lists, target):
for i in range(len(lists)):
if lists[i] == target:
return i
else:
return -1
def binary_search(self, lists, target):
start_val = 0
end_val = len(lists) - 1
while start_val <= end_val:
middle_val = (end_val+start_val) // 2
if lists[middle_val] == target:
return middle_val
elif lists[middle_val] < target:
start_val = middle_val + 1
elif lists[middle_val] > target:
end_val = middle_val - 1
return -1
def binary_search_recursion(self, lists, target):
start_val = 0
end_val = len(lists) - 1
def bin_rec(lists, start_val, end_val, target):
if start_val > end_val:
return -1
middle_val = (end_val+start_val) // 2
if lists[middle_val] == target:
return middle_val
elif lists[middle_val] < target:
return bin_rec(lists, middle_val+1, end_val, target)
elif lists[middle_val] > target:
return bin_rec(lists, start_val, middle_val-1, target)
return bin_rec(lists, start_val, end_val, target)
def random_list_gen(self, number):
from random import randint
lists = []
for i in range(number):
lists.append(randint(0,100000000000))
lists.sort()
return lists
# print(Search().random_list_gen(10000))
big_list = Search().random_list_gen(10000)
print(Search().linear_serch(big_list,944))
print(Search().binary_search(big_list,944))
print(Search().binary_search_recursion(big_list,944))