1、搜索

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

2、二分法查找

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

3、python代码实现

3.1、递归方式

def binary_search(alist, item):"""二分查找——递归"""n = len(alist)mid = n // 2if n > 0:# 如果存在元素,返回 Trueif alist[mid] == item:return True# 如果 目标元素 小于 alist的中间值索引对应的索引elif item < alist[mid]:return binary_search(alist[:mid], item)# 否则,就在右边else:return binary_search(alist[mid+1:], item)return False

3.2、非递归

def binary_search_2(alist, item):"""二分查找——非递归"""n = len(alist)first = 0last = n-1while first <= last:mid = (first+last) // 2if alist[mid] == item:return True# 如果 目标值 在右侧,将last等于中间值的左侧第一个elif item < alist[mid]:last = mid - 1# 如果在左侧,将first等于中间值右边第一个else:first = mid + 1return False

4、时间复杂度

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

二分查找及时间复杂度相关推荐

  1. 算法 二分查找的时间复杂度为O(log2N)的原因推理

    时间复杂度概念还不清楚的可以先看我的下面这个文章: https://blog.csdn.net/u010452388/article/details/80875958 由于二分查找每次查询都是从数组中 ...

  2. 二分查找的时间复杂度以及算法

    ​ 给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置 示例: 数组:[1,3,6,9,14,35,67] 查找的值:9输出:3 1.计算数据规模为n二分查找的时间复杂度 循环 ...

  3. 二分查找的时间复杂度分析

    话不多说,先上代码 : public int binarysearch (int []array,int value ){int begin =0;int end = array.length -1; ...

  4. php二分查找算法时间复杂度,一个运用二分查找算法的程序的时间复杂度是什么...

    一个运用二分查找算法的程序的时间复杂度是"对数级别".二分查找是一种效率较高的查找方法,算法复杂度即是while循环的次数,时间复杂度可以表示"O(h)=O(log2n) ...

  5. C++二分查找,时间复杂度是O(logn)

    二分查找属于一种简单却高效的算法,时间复杂度是O(logn),在二分查找之前需要先对其进行排序,C++里面的默认是升序,如果需要降序,需要进行一下修改: //C++排序是升序还是降序 //a>b ...

  6. 二分查找与时间复杂度计算分析

    二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.   原理:假设表中元素 ...

  7. 算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了

    最近发现了个好东西,就是一个学算法的好东西,是网易公开课的一个视频. 直通车 这是麻省理工学院的公开课,有中英字幕,感谢网易.. 也可以在App把视频缓存下来之后再放到电脑上面看,因为我这样可以倍速, ...

  8. 算法简介——二分查找,时间复杂度,空间复杂度

    文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...

  9. 二分查找的时间复杂度

    计算二分查找函数的时间复杂度,我们需要对代码进行分析:我们用二分查找法查找数据时,查找一次后可以筛去一半的数据,经过一次次的筛选,最后会使得待查数据只剩一个,那么我们查找的次数就是while循环执行的 ...

最新文章

  1. 物联网时代传感器厂商竞争格局揭秘
  2. RunDll32.exe 详解及[Windows批处理]清除IE缓存
  3. javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-dao.xml
  4. ORACLE字符集基础知识
  5. git远程删除分支后,本地git branch -a 依然能看到的解决办法
  6. 基于linux在线预览
  7. 下载Visual Studio 2008 Beta 2
  8. Netlink 内核实现分析(二):通信
  9. java并发包是谁编写的_0.Java并发包系列开篇
  10. win10打开视频显示HEVC视频扩展
  11. Keil MDK5安装详细步骤
  12. java读取rar_java怎么读取Zip和RAR里面的文件啊?
  13. 震网病毒这类“精确制导的网络导弹“与传统的网络攻击相比较,有哪些新的特点?
  14. ioDraw - 好用的流程图绘制软件
  15. python round用法_Python round 函数
  16. 角度和弧度之间的转换
  17. 互联网时代,站对了风口,猪都能飞起来
  18. 博客什么的写也就写了
  19. 解读:机器学习预测收益模型应该采取哪种度量指标
  20. 2017.7.27 计算机编程培训第二天

热门文章

  1. QQ群霸屏优化技术之轻松日引3000+IP
  2. 【每日一练】68—CSS实现一组渐变按钮动画效果
  3. 现代软件工程 教课心得
  4. Compiz Fusion 简介
  5. JavaScript isArray
  6. Linux下git clone速度奇慢的有效解决办法(亲测有效)
  7. 植物大战僵尸海盗22困难通关
  8. 未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)
  9. 金蝶K/3 Cloud 实施笔记
  10. 给你一个小时,怎样有序撬启Web测试?