python 二分法查找

时间:2022-10-12 22:11:05

 

def bin_search(data,val):
    low=0
    high=len(data)-1
    while low <= high and val !=-1:
        mid=int((low+high)/2)
        if val<data[mid]:
            print('%d 介于位置 %d[%3d] 和中间值 %d[%3d] 之间,找左半边' \
                   %(val,low+1,data[low],mid+1,data[mid]))
            high=mid-1
        elif val>data[mid]:
            print('%d 介于中间值位置 %d[%3d] 和 %d[%3d] 之间,找右半边' \
                  %(val,mid+1,data[mid],high+1,data[high]))
            low=mid+1
        else:
            return mid
    return -1
val=1
data=[5,6,7,8,9]
while True:
    num=0
    val=int(input('请输入查找键值(1-9),输入-1结束:'))
    if val ==-1:
        break
    num=bin_search(data,val)
    if num==-1:
        print('##### 没有找到[%3d] #####' %val)
    else:
        print('在第 %2d个位置找到 [%3d]' %(num+1,data[num]))
print('数据内容为:')
for j in data:
    print('%3d' %(j), end='')
print()