简介二分查找算法与相关的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之PyMongo使用总结
May 26 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
May 10 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
Python实现计算文件MD5和SHA1的方法示例
Jun 11 Python
Python绘制热力图示例
Sep 27 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
django API 中接口的互相调用实例
Apr 01 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
简单了解python列表和元组的区别
May 14 Python
在keras里实现自定义上采样层
Jun 28 Python
如何利用Python 进行边缘检测
Oct 14 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
加热夹克:RAVEAN
2018/10/19 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
技校生自我鉴定
2013/12/08 职场文书
简历中个人自我评价范文
2013/12/26 职场文书
销售行政专员职责
2014/01/03 职场文书
小学教育见习报告
2014/10/31 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
《给予树》教学反思
2016/03/03 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
python 提取html文本的方法
2021/05/20 Python
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
JavaScript实现队列结构过程
2021/12/06 Javascript
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫