# 二分查找,前提是数据是有序的数列
def search(list_data, search_num):
# 搜索开始位置
start = 0
end = len(list_data) - 1
ret_index = -1 # 未找到就是-1
search_cnt = 0 # 查找的次数
while True:
# 当左侧比右侧小说明没有找到结果直接返回
if start > end:
break
mid = (start + end) // 2 # 取到中间位
mid_data = list_data[mid]
# 相等表示找到了,直接返回位置
if search_num == mid_data:
ret_index = mid
break
# 比中间数大表示在右侧
elif search_num > mid_data:
start = mid + 1
# 比中间数小说明在左侧
else:
end = mid - 1
search_cnt += 1
return ret_index, search_cnt
if __name__ == '__main__':
search_value = int(input('请输入你要查找的数字: '))
data = [1, 2, 3, 4, 5]
ret, cnt = search(data, int(search_value))
if ret == -1:
print('没有在数列里面所需要的值')
else:
print('需要查找的数位置在:{},查找的次数为{}'.format(ret, cnt))
网友评论