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

一、顺序查找

最基本的查找技术,过程:从表中的第一个(或最后一个)记录开始,逐个进行记录的 关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录; 如果直到最后一个(或第一个)记录,其关键字和给定值比较都不等时,则表示没有查到记 录,查找不成功。

1.1、代码实现

#从 a 列表中查找值 v,如果找到则返回第一次出现的下标,否则返回-1
def sequenceSearch(a,v):for i in range(len(a)):if a[i] == v:return i return -1if __name__ == '__main__':a=[11,22,33,44,55,11]v=22index=sequenceSearch(a,v)print('查找到的索引为:',index)

二、二分法查找

(注意:二分法查找只能作用于有序的顺序表)

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求 待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有 序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较, 如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后 fp 两个子表,如果中 间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。


2.1、时间复杂度

  • 最优时间复杂度:O(1)
  • 最坏时间复杂度:O(Iogn)

2.2、代码实现(两种方法)

方法一:非递归实现

#使用循环实现二分法(非递归)
def binary_search(alist,item):n=len(alist)start=0end=n-1while start<=end:mid=(start+end)//2#判断中间值与比较的值vif alist[mid] == item:return Trueelif alist[mid] > item: #左边列表查找end=mid-1else:start=mid+1return False

方法二:递归实现

递归方式实现
def binary_search2(alist,item):n=len(alist)#递归出口if n==0:return Falsemid=n//2if alist[mid] == item:return Trueelif alist[mid] < item: #右边列表查找return binary_search(alist[mid+1:],item)else:return  binary_search(alist[0:mid],item)

数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)相关推荐

  1. 强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C(下)

    强化学习经典算法笔记(十二):近端策略优化算法(PPO)实现,基于A2C 本篇实现一个基于A2C框架的PPO算法,应用于连续动作空间任务. import torch import torch.nn a ...

  2. 12_JavaScript数据结构与算法(十二)二叉树

    JavaScript 数据结构与算法(十二)二叉树 二叉树 二叉树的概念 如果树中的每一个节点最多只能由两个子节点,这样的树就称为二叉树: 二叉树的组成 二叉树可以为空,也就是没有节点: 若二叉树不为 ...

  3. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  4. 数据结构与算法:十大排序算法之插入排序

    数据结构与算法:十大排序算法之插入排序 package TopTenSortingAlgorithms;import java.util.Arrays; import java.util.Scanne ...

  5. 数据结构与算法:十大排序算法之堆排序

    数据结构与算法:十大排序算法之堆排序 堆排序可以说是选择排序的优化 package TopTenSortingAlgorithms;import java.util.Arrays; import ja ...

  6. 数据结构与算法:十大排序算法之冒泡排序

    数据结构与算法:十大排序算法之冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换 ...

  7. 国科大学习资料--人工智能原理与算法-第十二次作业解析(学长整理)

    国科大学习资料–人工智能原理与算法-第十二次作业解析(张文生老师主讲)(14.14)

  8. 强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现

    强化学习经典算法笔记(十四):双延迟深度确定性策略梯度算法TD3的PyTorch实现 TD3算法简介 TD3是Twin Delayed Deep Deterministic policy gradie ...

  9. Boost库学习笔记(二)算法模块-C++11标准

    Boost库学习笔记(二)算法模块-C++11标准 一.综述 Boost.Algorithm是一系列人通用推荐算法的集合,虽然有用的通用算法很多,但是为了保证质量和体积,并不会将太多通用算法通过审查测 ...

  10. 数据结构源码笔记(C语言):分块法查找

    //实现分块法查找的算法#include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...

最新文章

  1. 面试官:因为这个语言,我淘汰了90%的人!
  2. Ubuntu中使用WPS
  3. XXX管理平台系统——概要
  4. hbase hmaster启动起来就自动关闭
  5. ubuntu linux kvm安装,ubuntu16.04 下kvm安装
  6. Bootstrap3 静态模态对话框
  7. 535 5.7.8 Error: authentication failed: generic failure安装EMOS时SMTP测试报错
  8. arduino 下载 https://downloads.arduino.cc/packages/package_index.json error
  9. TIFF图像文件格式分析
  10. 电脑从windows变成linux,从Windows换到Linux下来
  11. BMVC 2020 Keynote 消除数据集偏见
  12. 苹果计算机取消用户名和密码进入不,苹果手机刷机过后进不了桌面要id账号和密码但是忘记了怎么处理?...
  13. 计算机辅助翻译小结,计算机辅助翻译
  14. 松翰单片机之M2ASM创建新工程
  15. qt emit是什么意思_2020年12月12日 无赞赏QT吗哪 :如天上的星星永远发光的信仰...
  16. XP系统清理优化工具箱
  17. linux把光标移到文件开头的命令,linux操作命令总结,希望可以帮助到菜鸟
  18. 使用vue-cli快速构建项目
  19. 东方欲晓,莫道君行早
  20. hihoCoder #1246 : 王胖浩与环 (数学)

热门文章

  1. ubuntu 安装 talib
  2. NLP-基础知识-006(机器学习)
  3. 基于py36的glob模块总结
  4. python 库整理: collections.namedtuple
  5. 机器学习笔记:反向传播
  6. 机器学习笔记:ResNet 及残差连接
  7. 深度学习核心技术精讲100篇(七)-keras 实战系列之深度学习模型处理多标签(multi_label)
  8. 深度神经网络(DNN)损失函数和激活函数的选择
  9. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
  10. 服务器中文名图片上传后 显示不,更换服务器后无法显示上传得图片