相关链接:
实现代码:
def t_search (list, item): #list:需要查询的列表,item:列表的标签
first = 0
last = len(list)-1
while first <= last:
half = (first + last)/2
if list[half] == item:
return half #查询成功,返回标签值
else:
if list[half] > item:
last = half-1
else:
first = half+1
return None #列表中没有这个元素
#------------使用方式-------------#
x=[2,3,4,5,6,7,8]
print t_search(x,5) #起始标签为0
代码解释:
首先定义一个二分法函数 “t_search”,函数的两个参数是list(表示需要查询的数列,需要强调一下,数列必须是有次序的)和item(用来返回查询元素的标签,如果元素不在数列内,那么返回None)。
之后,定义一个first表示每次查询的起点,一个last表示每次查询的终点。第一次查询从最中间half开始,需要注意的是,有可能最中间的那个元素的标签是小数,所以可以进行取整。
接着,就是不断地进行迭代。当判断第一次查询后的结果偏小时,则改变first的大小进行重新查询。
最后,当查询全部结束后,没有发现需要查询的元素则返回None,否则返回标签值。
原理分析:
你参加了超市的“猜价格”活动,猜中价格就可以拿到商品。超市提示商品的价格是0到100之间,且为整数。你会怎么猜
一种简单而实用的方法是,先猜50,如果超市提示高了,你就会猜25,如果超市提示低了,你又会猜37。依此类推,你就可以在限定的次数内猜到商品价格。
这就是一种简单的二分法例子,可以根据这个例子来理解代码。