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. js的defer属性
  2. 《Python面向对象编程指南》——1.2 基类中的__init__()方法
  3. 经典C语言程序100例之二八
  4. 【SDL】SDL简介
  5. 计算机英语笑话,关于计算机的幽默笑话
  6. Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队
  7. 前端学习(1986)vue之电商管理系统电商系统之建立新分支
  8. 用程序同步mysql数据库表_初次用Java写了个数据库表同步工具
  9. TDengine与OpenTSDB对比测试
  10. js工作笔记002---检测当前是不是触摸设备(移动设备)
  11. 95后频频离职,是员工本人问题?
  12. 不是我发现了美,只不过这个世界本身就很美。记快乐的今年生日。
  13. GPS广播星历和精密星历的下载
  14. PT100/PT1000热电阻值计算
  15. 儿研所 计算机训练,首都儿研所自闭症训练中心成立
  16. esp8266接入小爱同学,通过mqtt
  17. 计算机组成原理(3)——存储器
  18. CSV保存身份证后再打开后4位0000的解决办法
  19. 单词1(-cess -ceed -cede -gress -gred -grad)=to go、go
  20. Qt小游戏教程之贪吃蛇(带源码)

热门文章

  1. 利用原生写js满天星星
  2. 台式机dp接口_了解笔记本电脑的各种视频接口
  3. 《ShareX 》截图神器
  4. Linux学习和阿里云服务器的配置(感谢秦老师)
  5. 四字计算机名称是什么原因,各位大侠 桌面上我的电脑图标下的“我的电脑”四个字成了“的电脑” ,是为什么会事...
  6. 百度ueditor上传图片时如何设置默认宽高度
  7. SpringBoot整合Mybatis-Plus
  8. kbhit(), bioskey(), system(pause)
  9. MTL TXN REQUEST HEADERS HEADER STATUS or MTL TXN REQUEST LIN
  10. JQuery事件绑定解绑方法小结