简介二分查找算法与相关的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程序生成word和PDF文档的方法
Feb 14 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
python数据结构之链表的实例讲解
Jul 25 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
python TCP Socket的粘包和分包的处理详解
Feb 09 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
Django时区详解
Jul 24 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
django使用channels实现通信的示例
Oct 19 Python
python 自动识别并连接串口的实现
Jan 19 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
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP引用的调用方法分析
2016/04/25 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
python设置值及NaN值处理方法
2018/07/03 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
python中count函数简单的实例讲解
2020/02/06 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
python中@contextmanager实例用法
2021/02/07 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
2014年道德讲堂实施方案
2014/03/05 职场文书
政风行风建设责任书
2014/07/23 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
颐和园的导游词
2015/01/30 职场文书
数学复习课教学反思
2016/02/18 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
python scipy 稀疏矩阵的使用说明
2021/05/26 Python