二分查找:
将查找范围平分为二,对比要查找的属于哪一部分,再将那部分范围继续平分为二,对比属于哪部分,以此类推,最终得到要查找的对象,即为二分查找。
注意:查找对象必须是有序序列。
二分查找的时间复杂度为对数时间O (log n )。
示例:
# 二分查找猜大小
def search(my_list, item):
low = 0 #low和high用于查找指定元素的索引范围
high = len(my_list)-1
while low <= high: #只要索引范围内还有元素未查找就继续循环
mid = (low + high)//2 #二分查找取中间索引
print(mid)
guess = my_list[mid] #获取该中间索引的值
print(guess)
print('\n')
if guess == item: #猜中了
return mid
elif guess > item: #猜大了
high = mid - 1 #将索引范围最大值减小到该中间索引的前一位
else: #猜小了
low = mid + 1 #将索引范围最小值增大到该中间索引的后一位
return None #未在有序列表中的指定元素返回None
my_list = [1, 3, 5, 7, 9, 11] #有序列表
print(search(my_list, 7)) #测试指定元素
print(search(my_list, -1)) #测试未在有序列表中的指定元素
结果:
2
5
4
9
3
7
3
2
5
0
1
None