简介二分查找算法与相关的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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
python3.3实现乘法表示例
Feb 07 Python
浅析Python中的for 循环
Jun 09 Python
常见的python正则用法实例讲解
Jun 21 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
为什么说Python可以实现所有的算法
Oct 04 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
django列表筛选功能的实现代码
Mar 27 Python
python如何代码集体右移
Jul 20 Python
Python Process创建进程的2种方法详解
Jan 25 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
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
详解Nodejs的timers模块
2016/12/22 NodeJs
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
2018/03/16 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python微信操控itchat的方法
2019/05/31 Python
Tensorflow 模型转换 .pb convert to .lite实例
2020/02/12 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
2020/06/30 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
党员干部承诺书范文
2014/03/25 职场文书
留学顾问岗位职责
2014/04/14 职场文书
优秀护士演讲稿
2014/04/30 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
顶岗实习协议书
2015/01/29 职场文书
法定授权委托证明书
2015/06/18 职场文书
辩论赛新闻稿
2015/07/17 职场文书
班主任培训研修日志
2015/11/13 职场文书