顺序搜索
输入:n个元素的数组A[1...n]和元素x。
输出:如果x=A[j],,则输出j,否则输出0。
思想:扫描A中的所有项目,将每个项目于x比较,如果在j次比较后搜索成功,则返回j的值。
#伪代码linearsearch
j=1
while j<n and x!=A[j]:
j=j+1
if x==A[j]:
return j
else: return 0
二分搜索
输入:n个元素的升序数组A[1...n]和元素x。
输出:如果x=A[j],,则输出j,否则输出0。
思想:一般来说,A[low...high]为元素按升序排列的非空数组,A[mid]为中间元素,假定x>A[mid],则会继续搜索A[mid]左边的序列,反之,搜索A[mid]右边的序列。即在每次比较后都会省去另一半的比较。
特点:对一个大小为n的排序数组,算法binarysearch执行比较的最大次数为。一般来说,只要x大于等于序列中的最大元素,算法总要执行最大次数的比较。
def BinarySearch(show_list,x,low,high):
if low<=high:
mid=(low+high)//2
if x>=show_list[mid]:
low=mid+1
elif x<=show_list[mid]:
high=mid-1
if high==-1:
return 0
elif high<=mid:#查找到左半边的情况
return high+1
else :
return -1