二分查找及时间复杂度
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)
二分查找及时间复杂度相关推荐
- 算法 二分查找的时间复杂度为O(log2N)的原因推理
时间复杂度概念还不清楚的可以先看我的下面这个文章: https://blog.csdn.net/u010452388/article/details/80875958 由于二分查找每次查询都是从数组中 ...
- 二分查找的时间复杂度以及算法
给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置 示例: 数组:[1,3,6,9,14,35,67] 查找的值:9输出:3 1.计算数据规模为n二分查找的时间复杂度 循环 ...
- 二分查找的时间复杂度分析
话不多说,先上代码 : public int binarysearch (int []array,int value ){int begin =0;int end = array.length -1; ...
- php二分查找算法时间复杂度,一个运用二分查找算法的程序的时间复杂度是什么...
一个运用二分查找算法的程序的时间复杂度是"对数级别".二分查找是一种效率较高的查找方法,算法复杂度即是while循环的次数,时间复杂度可以表示"O(h)=O(log2n) ...
- C++二分查找,时间复杂度是O(logn)
二分查找属于一种简单却高效的算法,时间复杂度是O(logn),在二分查找之前需要先对其进行排序,C++里面的默认是升序,如果需要降序,需要进行一下修改: //C++排序是升序还是降序 //a>b ...
- 二分查找与时间复杂度计算分析
二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 原理:假设表中元素 ...
- 算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了
最近发现了个好东西,就是一个学算法的好东西,是网易公开课的一个视频. 直通车 这是麻省理工学院的公开课,有中英字幕,感谢网易.. 也可以在App把视频缓存下来之后再放到电脑上面看,因为我这样可以倍速, ...
- 算法简介——二分查找,时间复杂度,空间复杂度
文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...
- 二分查找的时间复杂度
计算二分查找函数的时间复杂度,我们需要对代码进行分析:我们用二分查找法查找数据时,查找一次后可以筛去一半的数据,经过一次次的筛选,最后会使得待查数据只剩一个,那么我们查找的次数就是while循环执行的 ...
最新文章
- 物联网时代传感器厂商竞争格局揭秘
- RunDll32.exe 详解及[Windows批处理]清除IE缓存
- javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-dao.xml
- ORACLE字符集基础知识
- git远程删除分支后,本地git branch -a 依然能看到的解决办法
- 基于linux在线预览
- 下载Visual Studio 2008 Beta 2
- Netlink 内核实现分析(二):通信
- java并发包是谁编写的_0.Java并发包系列开篇
- win10打开视频显示HEVC视频扩展
- Keil MDK5安装详细步骤
- java读取rar_java怎么读取Zip和RAR里面的文件啊?
- 震网病毒这类“精确制导的网络导弹“与传统的网络攻击相比较,有哪些新的特点?
- ioDraw - 好用的流程图绘制软件
- python round用法_Python round 函数
- 角度和弧度之间的转换
- 互联网时代,站对了风口,猪都能飞起来
- 博客什么的写也就写了
- 解读:机器学习预测收益模型应该采取哪种度量指标
- 2017.7.27 计算机编程培训第二天