def search(sequence, number, lower = 0, upper = None):
assert len(sequence) > 0, 'sequence is empty!'
if lower == 0 and upper == None:
upper = len(sequence) - 1
if number > sequence[upper] or number < sequence[lower]:
return -1
if lower == upper:
assert number == sequence[upper],'error!'
return upper
middle = (lower + upper) // 2
if number == sequence[middle]:
return middle
elif number < sequence[middle]:
return search(sequence, number, lower, middle)
else:
return search(sequence, number, middle, upper)
L12 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
index = search(L12, 100)
assert len(sequence) > 0, 'sequence is empty!'
if lower == 0 and upper == None:
upper = len(sequence) - 1
if number > sequence[upper] or number < sequence[lower]:
return -1
if lower == upper:
assert number == sequence[upper],'error!'
return upper
middle = (lower + upper) // 2
if number == sequence[middle]:
return middle
elif number < sequence[middle]:
return search(sequence, number, lower, middle)
else:
return search(sequence, number, middle, upper)
L12 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
index = search(L12, 100)
print(index)
# 标准库中的bisect模块可以非常有效的实现二分法查找。