二分查找

  二分查找又称折半查找,其输入的必须是有序的元素列表。二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x

  

 #python实现二分查找
def binary_search(list,item):
low=0
high=len(list)-1
while(low<=high):
mid=int((low+high)/2)
if list[mid]==item:
return mid
if list[mid]>item:
high=mid-1
if list[mid]<item:
low=mid+1
return None my_list=[1,2,4,8,9,15,22,30]
print(binary_search(my_list,2))
1 2 3 4 5 ... 17 18 19 20

  假设如上表1-20按顺序排序,采用二分查找方式查找。最好情况下查找1-20的mid即10,一次即可查找到。

  如果是查找17呢?(这是最坏情况下)

  第一趟,mid=10,17>mid,即low的下标变为mid+1=11,查找右半部分

  

11 12 ... 19 20

  第二趟,mid变为(11+20)/2=15,17>mid,low的下标变为16,再次取上表的右半部,取上表左半部分

  

16 17 18 19 20

  第三趟,mid变为(16+20)/2=18,17<18,这次需要high的下标变为17

16 17

  第四趟,mid变为(16+17)/2=16,17>16,这次需要low的下标变为17,此时low和high的下标均变为17

17

  第五趟,mid=item=17,程序结束。程序共执行

大O表示法

  大O表示法是一种特殊的表示法,指出了算法的运行速度有多快。大O表示法指出了最糟情况下的运行时间。

  • O(log n),也叫对数时间,这样的算法包括二分查找。
  • O(n),也叫线性时间,这样的算法包括简单查找。
  • O(n * log n),这样的算法包括第4章将介绍的快速排序——一种速度较快的排序算法。
  • O(n 2 ),这样的算法包括选择排序——一种速度较慢的排序算法。
  • O(n!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法

算法图解学习笔记01:二分查找&大O表示法的更多相关文章

  1. 算法图解第一章_二分查找_python

    什么是二分查找? 我们先玩一个游戏. 在1至100之间我写下一个数,由你来猜测这个数是多少.我会告诉你高了还是低了. 最简单的办法就是每次取一半. 例如 "50""低了& ...

  2. Python算法——《算法图解》笔记

    算法目录 二分查找 大O表示法 选择排序 递归 快速排序,分而治之(D&C) 散列表——字典 广度优先搜索——BFS Dijkstra算法 贪婪算法 二分查找 # 要求list是有序表,num ...

  3. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  4. 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素

    [算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...

  5. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  6. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

  7. SaToken学习笔记-01

    SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...

  8. LC T668笔记 & 有关二分查找、第K小数、BFPRT算法

    LC T668笔记 [涉及知识:二分查找.第K小数.BFPRT算法] [以下内容仅为本人在做题学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] !! ...

  9. 《Algorithms Unlocked》读书笔记2——二分查找和排序算法

    <Algorithms Unlocked>是 <算法导论>的合著者之一 Thomas H. Cormen 写的一本算法基础,算是啃CLRS前的开胃菜和辅助教材.如果CLRS的厚 ...

随机推荐

  1. entity_class实体类

    对应数据库中表,并继承基础模型类~

  2. docker 构建 spring boot项目

    在docker 开始部署springBoot项目 1.在centos7 ~ 创建一个文件夹docker 里面放置 上面的Dockerfile 和 springBoot 打包的项目docker_spri ...

  3. tips 移出 消失和 移入 显示

    //规则tipsvar tip_index = 0;$(document).on('mouseenter', '.layui-badge-rim', function(){ tip_index=lay ...

  4. ACTIVIT 5.15.1修改记录

    1.ProcessDefinitionEntity 将 protected transient ActivitiEventSupport eventSupport; 修改成: protected  A ...

  5. Gym 101201F Illumination (Two-Sat)

    题意:一个n*n的房子,有很多灯,每个格子只能被上下方向照一次.左右方向照一次,每个灯可以选择上下或是左右照,照明长度以自身位置为中心,占用2*r+1个格子.问能否安排一种方案,使所有格子满足条件. ...

  6. awk基础04-内置函数

        在awk中常用的内置函数大概分为:数值函数.字符函数.时间函数.二进制操作函数.数组函数.自定义函数等. 数值函数   常用的数值函数主要有int.rand.srand.sqrt等.详细如下所 ...

  7. C++中break/Continue,exit/return的理解

    刚才遇到了一个问题,大概是这样的. func1执行完成,进入func1Complete,其中switch处理func1返回的数据,如果返回数据是clear则重新执行func1. 测试的时候发现func ...

  8. Sourcetree拉取推送问题

    以下sourcetree使用时出现的问题:可以暂时用删除passwd文件解决 拉取时账号密码输入错误 已经有一个远程仓库了,但是需要拉取另一个远程仓库时,提示URL 进入 C:\Users\用户名\A ...

  9. 通过一个例子感受C# 6.0新特性

    微软在Visual Studio 2015中更新C#语言到6.0,添加了很多很好的特性,以使C#语言继续跻身于最优秀语言之行列.下面通过一个例子快速感受一下C# 6.0的新特性,以下程序在VS2015 ...

  10. 【转发】在SQL Server中通过字段值查询存储该字段的表

    -- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.     -- Purpose: To search all colu ...