定义:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
思路:
比如说有一个列表L,里面有一组数字,并且这一组数字经过排序(L.sort()),把这个列表的长度整除二得到一个数(假设数组长度7,7//2=3),然后把这个列表看做为左边3个和右边4个,然后输入你要查找的数字,如果L[3]正好和你要查找的值(假设是x)相等,则把该值返回,如果L[3]>x,那么你所查找的值一定在L[3]的左边,然后再把左边的值做类似上边的操作。
如果L[3]<x,那么你查找的值一定在L[3]的右边,然后类推。
递归方式(输0停止输入):
def BinarySearch(L,x,low,high):
if(low>high):
return -1
else:
mid=(low+high)//2
if(L[mid]==x):
return mid
elif L[mid]>x:
return BinarySearch(L,x,low,mid-1)
else:
return BinarySearch(L,x,mid+1,high)
L=[]
a=int(input('请输入数据:'))
while(a!=0):
L.append(a)
a=int(input('请输入数据:'))
L.sort()
x=int(input('请输入查找的数据:'))
print(BinarySearch(L,x,0,len(L)-1))
非递归方法:
def BinarySearch(L,x,low,high):
while low <= high:
mid = (low + high) // 2
if x < L[mid]:
high = mid - 1
elif x > L[mid]:
low = mid + 1
else:
return mid
return -1
L=[]
a=int(input('请输入数据:'))
while(a!=0):
L.append(a)
a=int(input('请输入数据:'))
L.sort()
x=int(input('请输入查找的数据:'))
print(BinarySearch(L,x,0,len(L)-1))