顺序搜索和二分搜索

顺序搜索

输入:n个元素的数组A[1...n]和元素x。

输出:如果x=A[j],1\leqslant j\leqslant n,则输出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],1\leqslant j\leqslant n,则输出j,否则输出0。

思想:一般来说,A[low...high]为元素按升序排列的非空数组,A[mid]为中间元素,假定x>A[mid],则会继续搜索A[mid]左边的序列,反之,搜索A[mid]右边的序列。即在每次比较后都会省去另一半的比较。

特点:对一个大小为n的排序数组,算法binarysearch执行比较的最大次数为\left \lfloor log n \right \rfloor+1。一般来说,只要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

参考书目:Algorithms Design Techniques and Analysis【沙特】M.H.Alsuwaiyel,如有错误欢迎留言指出,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值