简介二分查找算法与相关的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使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python开发的HTTP库requests详解
Aug 29 Python
python实现二分查找算法
Sep 21 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
python TKinter获取文本框内容的方法
Oct 11 Python
python爬取淘宝商品销量信息
Nov 16 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
详解Python循环作用域与闭包
Mar 21 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
基于python判断目录或者文件代码实例
Nov 29 Python
python中的split、rsplit、splitlines用法说明
Oct 23 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
PHP url 加密解密函数代码
2011/08/26 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
js 目录列举函数
2008/11/06 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
2016/05/26 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python机器学习之K-Means聚类实现详解
2018/02/22 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python3判断IP地址的方法
2021/03/04 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
大学生专业个人学习的自我评价
2013/10/26 职场文书
财务主管的岗位职责
2013/12/30 职场文书
初一生物教学反思
2014/01/18 职场文书
信息管理应届生求职信
2014/03/07 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
赞助商致辞
2015/07/30 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书