简介二分查找算法与相关的Python实现示例


Posted in Python onAugust 26, 2015

二分查找Binary Search的思想:
以有序表表示静态查找表时,查找函数可以用二分查找来实现。
二分查找(Binary Search)的查找过程是:先确定待查记录所在的区间,然后逐步缩小区间直到找到或找不到该记录为止。
1二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。
假设 low 指向区间下界,high 指向区间上界,mid 指向区间的中间位置,则 mid  = (low + high) / 2;
具体过程:
1.先将关键字与 mid 指向的元素比较,如果相等则返回mid。
2.关键字小于 mid 指向的元素关键字,则在 [ low,  mid-1 ]区间中继续进行二分查找。
3.关键字大于mid 指向的元素关键字,则在[ mid +1 , high] 区间中继续进行二分查找。

用Python实现二分查找示例:

>>> def find(self, num):
  l = len(self)
  first = 0
  end = l - 1
  mid = 0
  if l == 0:
   self.insert(0,num)
   return False
  while first < end:
   mid = (first + end)/2
   if num > self[mid]:
    first = mid + 1
   elif num < self[mid]:
    end = mid - 1
   else:
    break
  if first == end:
   if self[first] > num:
    self.insert(first, num)
    return False
   elif self[first] < num:
    self.insert(first + 1, num)
    return False
   else:
    return True
  elif first > end:
   self.insert(first, num)
   return False
  else:
   return True

>>> list_d = ['a','b','c','d','e','f','d','t']
>>> value_d = 't'
>>> aa=find(list_d,value_d)
>>> aa
True
>>> value_d='ha'
>>> aa=find(list_d,value_d)
>>> aa
False
Python 相关文章推荐
python实现博客文章爬虫示例
Feb 26 Python
Python中的作用域规则详解
Jan 30 Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python3数据库操作包pymysql的操作方法
Jul 16 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Python标准库shutil模块使用方法解析
Mar 10 Python
Python如何绘制日历图和热力图
Aug 07 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
Python可视化学习之matplotlib内置单颜色
Feb 24 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 #Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 #Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 #Python
Python中for循环和while循环的基本使用方法
Aug 21 #Python
Python中条件判断语句的简单使用方法
Aug 21 #Python
Python编程中的异常处理教程
Aug 21 #Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 #Python
You might like
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
JavaScript实现异步图像上传功能
2018/07/12 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
python 实现IP子网计算
2021/02/18 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
HTML5新增加的功能详解
2016/09/05 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
行政管理专业推荐信
2013/11/02 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
法人授权委托书格式
2014/04/08 职场文书
公司运动会策划方案
2014/05/25 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
违反学校规则制度检讨书
2015/01/01 职场文书
工作时间调整通知
2015/04/24 职场文书
老干部座谈会主持词
2015/07/03 职场文书
python数字图像处理之图像的批量处理
2022/06/28 Python