二分查找

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

  

 1 #python实现二分查找
 2 def binary_search(list,item):
 3     low=0
 4     high=len(list)-1
 5     while(low<=high):
 6         mid=int((low+high)/2)
 7         if list[mid]==item:
 8             return mid
 9         if list[mid]>item:
10             high=mid-1
11         if list[mid]<item:
12             low=mid+1
13     return None
14
15 my_list=[1,2,4,8,9,15,22,30]
16 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!),这样的算法包括接下来将介绍的旅行商问题的解决方案——一种非常慢的算法

转载于:https://www.cnblogs.com/vincentme/p/9395998.html

算法图解学习笔记01:二分查找大O表示法相关推荐

  1. 算法图解学习笔记01之二分查找

    不知道可以学到第几章,就不立flag了,容易倒 你要学会的不是写算法而是何时何地用何算法 package 第一章; //数组有序,要求快速查找出数据 public class BinarySearch ...

  2. 【算法学习笔记】二分查找法

    二分查找法 二分查找的本质就是分治法,小时候有过这么一种猜数字的游戏,你在心中想一个大于0小于100的数字,然后我来提问,你只用回答是或者不是,比如"你想的数字比50大吗" 你说不 ...

  3. 算法图解学习笔记02:递归和栈

    计算机内存原理 要说递归和栈的问题,首先就要说下计算机内存的基本原理.简单理解计算机内存原理可以将一台电脑看作超市的存包柜,每个柜子都有柜号(即计算机中的地址,如0x000000f).当需要将数据存储 ...

  4. 算法图解——学习笔记

    文章目录 算法简介 **第二章 选择排序** 数组与链表 排序算法 算法简介 算法:一组完成任务的指令,任何片段都可以视为算法. 第一章 算法集合: 算法种类 定义 二分法 一种查询方法,通过将查找特 ...

  5. 算法图解学习笔记02之选择排序

    package 第二章;import java.util.Arrays;//找出列表中最小(大)的,放入新列表(O(n)),再次找 public class SelectionSort {public ...

  6. 大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】

    视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程,总时长:14:22:04 教程资源:https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g,提取码: ...

  7. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

  8. 算法训练营学习笔记1

    算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...

  9. 2021第一学期学习笔记01

    2021第一学期学习笔记01 摘要 一.知识点 1.1 追溯 1.2 区块链 二.项目报告 三.本地服务器 四.环境配置 4.1 JDK 展望 摘要 本周的学习情况主要是进行基础理论的学习,查找有关于 ...

最新文章

  1. Algorithm:C++语言实现之概率算法相关问题(计算机中的概率事件、C语言中的随机事件、产生二维随机数、圆内均匀取点)
  2. Python3.7.5安装(Windows10附pip更换下载源)
  3. echart中拆线点的偏移_Real BIM | Rhino+Grasshopper在双曲异形玻璃幕墙中的应用
  4. Nginx快速搭建和基本使用
  5. 【Qt Tips】QLineEdit内容过滤之setValidator和setInputMask浅析
  6. 选择排序、冒泡排序、异或运算
  7. 福建师范计算机应用基础作业,福建师范大学《计算机应用基础》在线作业一答案.docx...
  8. Yate for Mac音乐标签管理工具
  9. 复杂网络作业四:第三题——随机图、小世界网络和真实网络的度分布
  10. 只需要10秒,使用PPT给证件照换底色
  11. android自动打开软键盘,Android打开关闭软键盘
  12. ac6005直连ap 如何配置_【无线】 AC直连AP配置
  13. Kubeadm部署-Kubernetes-1.18.6集群
  14. Tensorflow与keras学习 (3)——循环神经网络RNN
  15. 使用java将多种类型的文件如Word、PDF、JPG汇总到一个文档中(Word或者PDF)
  16. 机器学习吴恩达课程总结(一)
  17. python 今日头条 微头条_今日头条微头条范文-头条号的微头条你们都发些什么,该如何写?...
  18. e的精确值是多少?[z]
  19. 普元eos使用svn_普元DevOps介绍
  20. 光固化3D打印机切片参数分析

热门文章

  1. 每天一道LeetCode-----将有序序列转成高度平衡二叉搜索树
  2. 如何在windows下使用linux命令
  3. 贪心 - 划分字母区间
  4. LeetCode每日一题 24. 两两交换链表中的节点
  5. 记录 之 离线安装docker
  6. xhtml使用style属性
  7. 瑞斯康达nms_瑞斯康达iTN产品资料
  8. php curl 下载图片,CURL实现下载远程图片并保存到本地
  9. How-to: Use the ShareLib in Apache Oozie
  10. [GAE教程]初识 Google App Engine