简介二分查找算法与相关的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 Trie树实现字典排序
Mar 28 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
python爬取酷狗音乐排行榜
Feb 20 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python3中numpy函数tile的用法详解
Dec 04 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
详解pandas.DataFrame.plot() 画图函数
Jun 14 Python
Python可以用来做什么
Nov 23 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
ThinkPHP的URL重写问题
2014/06/22 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php微信开发之图片回复功能
2018/06/14 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
常用简易JavaScript函数
2009/04/09 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
快速入门Vue
2016/12/19 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
Python函数嵌套实例
2014/09/23 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
《晚上的太阳》教学反思
2014/04/23 职场文书
应届生找工作求职信
2014/06/24 职场文书
党员检讨书
2014/10/13 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
详解pytorch创建tensor函数
2022/03/22 Python