二分查找详解:
从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半
二分查找:
在一段数字内,找到中间值,判断要找的值和中间值大小的比较。
如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找。
如果中间值小一些,则在中间值的右侧区域继续按照上述方式查 找。
直到找到我们希望的数字。
def Binary_Search(data,val):
#low 和high代表下标 最小下标,最大下标
low=0
high=len(data)-1
# 只有当low小于High的时候证明中间有数
while low <=high:
#取列表中间值的下标
mid=(low+high)//2
#用下标取出列表中间的值与要查找的元素比较,如果相等就刚好找到,返回下标
if data[mid]==val:
#返回他的下标
return mid
#如果大于,就需要在前边一半列表再次查找,最小下标不变,最大下标则变成中间元素下标减一;就是取列表前半部分区间
elif data[mid]>val:
high=mid-1
#如果小于,就需要在后边一半列表再次查找,最大下标不变,最小下标则变成中间元素下标加一;就是取列表后半部分区间
else:
low=mid+1
return '元素不存在'
data = ['a','b','m','c','d','e','k','f']
#用二分查找需要先将列表以升序排序
ls=sorted(data)
print(ls)
print(Binary_Search(ls, 'm'))