#-*- coding:UTF-8 -*-#!/usr/bin/env python
#UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range
importsys
reload(sys)
sys.setdefaultencoding('utf8')defbinary_search(_list, searchNum):
low= 0 #最小数下标
high = len(_list) - 1 #最大数下标
#low <= high时才能证明中间有数
index = 1
while low <=high:
mid= (low+high)/2 #中间数下标
print(u'查找的次数为:{0}, low = {1}, high = {2} mid = {3}'.format(index, low, high, mid))
guess=_list[mid]if guess ==searchNum:returnmidelif guess > searchNum: #中间数大于指定数字,最大数下标移动
high = mid - 1
else:
low= mid + 1index+= 1
returnNoneif __name__ == '__main__':
maxCount= input(u'请输入列表的最大数值:'.encode('gbk'))
searchNum= input(u'请输入要查找的数值:'.encode('gbk'))print(u'搜寻顺序列表,数据为0 ~ {0}, 查找:{1}'.format(maxCount, searchNum))
index=binary_search(range(maxCount), searchNum)print(u'查找出的索引为:'+str(index))'''请输入列表的最大数值:1000
请输入要查找的数值:569
搜寻顺序列表,数据为0 ~ 1000, 查找:569
查找的次数为:1, low = 0, high = 999 mid = 499
查找的次数为:2, low = 500, high = 999 mid = 749
查找的次数为:3, low = 500, high = 748 mid = 624
查找的次数为:4, low = 500, high = 623 mid = 561
查找的次数为:5, low = 562, high = 623 mid = 592
查找的次数为:6, low = 562, high = 591 mid = 576
查找的次数为:7, low = 562, high = 575 mid = 568
查找的次数为:8, low = 569, high = 575 mid = 572
查找的次数为:9, low = 569, high = 571 mid = 570
查找的次数为:10, low = 569, high = 569 mid = 569
查找出的索引为:569'''