数据结构--知识点15--搜索算法(二分查找)

1、搜索

  • 搜索是在一个项目集合中找到一个特定项目的算法过程。
  • 搜索通常的答案是真的或假的
  • 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找

2、二分法查找

1)条件

  • 排好序的序列上进行
  • 有索引的序列上进行

即顺序表–在python中为列表

2)算法

假设查找[1,3,4,6,7,8,10,13,14]列表中是否有元素4

  • 首先由于是有顺序的序列,因此先找中间值是多少,即序列长度除以2–索引为4的为中间值–7
  • 得到之间值后,判断要找的值是大于还是小于中间值
  • 如果大于,则再在右侧序列中找中间值
  • 否则,则在左序列中找中间值–此时,7>4,因此再在左侧序列中找中间值
  • 此时,索引3/2=1,索引1的值为3,3<4,因此真实值在右侧
  • 右侧索引为2~3,(2+3)/2=2,索引2的值即为4

3)python实现

# 递归的二分查找
def binary_search(list,item):
    n=len(list)
    if n >= 1:
        mid=n//2
        if list[mid] == item:
            return True
        elif list[mid] < item:
            return binary_search(list[mid+1:],item)
        else:
            return binary_search(list[:mid],item)
    return False

# 非递归的二分查找
def binary_search_2(list,item):
    n=len(list)
    first=0
    last=n-1
    while first <= last:
        mid=(first+last)//2
        if list[mid]==item:
            return True
        elif list[mid] < item:
            first=mid+1
        else:
            last=mid-1
    return False

if __name__ == '__main__':
    list=[12,22,34,45,60,64,65,74,97]
    print(binary_search(list,34))
    print(binary_search(list,99))

    print(binary_search_2(list,34))
    print(binary_search_2(list,99))

结果:

True
False
True
False

4)时间复杂度

  • 最优时间复杂度:O(1)
  • 最坏时间复杂度:O(logn)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值