-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_search.py
66 lines (60 loc) · 1.47 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
# binary_search
# 計算量O(logN)
# using library
# listの昇順を苦座さずに挿入できる位置を返す
# リスト要素がすべてわかっていないと使えない
# ソートされている必要がある
# import bisect
#
# a = [1,2,3,4,5,6,7,8,9,10]
# x = 5
# ins_i = bisect.bisect_left(a,x)
# a.insert(ins_i,x)
#
# print(a)
# pure python
# a = [1,2,3,4,5,6,7,8,9,10]
# low = 0
# high = len(a) - 1
# x = 5
#
# while low <= high:
# binary = (low + high) // 2
# predict = a[binary]
# if predict == x:
# print(f"{x} is exist.")
# return True
# break
# elif predict < x:
# low = binary + 1
# else:
# high = - 1
# if predict != x:
# print(f"{x} is not found.")
# return False
import sys
def binary_search(a, value):
low = 0
high = len(a) - 1
while low <= high:
binary = (low + high) // 2
predict = a[binary]
if predict == value:
print(f"{value} is exist.")
return True
break
elif predict < value:
low = binary + 1
else:
high = binary - 1
print(f"{value} is not found.")
return False
if __name__ == '__main__':
a = range(15)
for num in a:
assert binary_search(a, num)
assert binary_search(a, -30) == False
assert binary_search(a, 15) == False
assert binary_search(a, 14) == True
assert binary_search(a, 0) == True
assert binary_search([1,2,3,4,5,6,20], 3) == False