简介二分查找算法与相关的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 相关文章推荐
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
python读取文件名称生成list的方法
Apr 27 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
简单了解python元组tuple相关原理
Dec 02 Python
PyCharm如何导入python项目的方法
Feb 06 Python
python生成任意频率正弦波方式
Feb 25 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
django中嵌套的try-except实例
May 21 Python
TensorFlow的自动求导原理分析
May 26 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下使用SimpleXML 处理XML 文件
2010/02/27 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
javascript 写类方式之五
2009/07/05 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Flask之请求钩子的实现
2018/12/23 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
pandas中ix的使用详细讲解
2020/03/09 Python
如何删除一个表里面的重复行
2013/07/13 面试题
机械电子工程专业自荐书
2014/06/10 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android