简介二分查找算法与相关的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登陆asp网站页面的实现代码
Jan 14 Python
深入理解Python对Json的解析
Feb 14 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
python学习之hook钩子的原理和使用
Oct 25 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
关于python3中setup.py小概念解析
Aug 22 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
大数据分析用java还是Python
Jul 06 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 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 删除数组元素
2009/01/16 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php实现RSA加密类实例
2015/03/26 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
php函数式编程简单示例
2019/08/08 PHP
JavaScript中的其他对象
2008/01/16 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
Djang中静态文件配置方法
2015/07/30 Python
python paramiko模块学习分享
2017/08/23 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python进度条显示之tqmd模块
2020/08/22 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
给导游的表扬信
2014/01/10 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
环保倡议书
2014/04/14 职场文书
考核评语大全
2014/04/29 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL