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 = [0]*50
for i in range(50):
data[i]=val
val = val+random.randint(1,5)
while True:
num = 0
val = int(input("请输入查找键值(1-150),输入-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 i in range(5):
for j in range(10):
print("%3d-%-3d" %(i*10+j+1,data[i*10+j]),end=" ")
print()
在折叠法中有两种做法,如上例直接将每一部分相加所得的值作为其bucket address,这种方法称为"移动折叠法"。哈希法的设计原则之一就是降低碰撞,如果希望降低碰撞的机会,就可以将上述每一部分数字中的奇数或偶数反转,再相加来取得其bucket address,这种改进的做法称为"边界折叠法"(folding at the boundaries)