简介二分查找算法与相关的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实现基于两张图片生成圆角图标效果的方法
Mar 26 Python
微信跳一跳辅助python代码实现
Jan 05 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
linux安装python修改默认python版本方法
Mar 31 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
python 监测内存和cpu的使用率实例
Nov 28 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
Django设置Postgresql的操作
May 14 Python
Python填充任意颜色,不同算法时间差异分析说明
May 16 Python
python实现马丁策略的实例详解
Jan 15 Python
详解python的内存分配机制
May 10 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显示MySQL数据的三种方法
2008/06/05 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
PHP实现图片压缩
2020/09/09 PHP
phpwind放自动注册方法
2006/12/02 Javascript
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
vue中axios的二次封装实例讲解
2019/10/14 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
合作意向书范本
2014/03/31 职场文书
销售内勤岗位职责
2014/04/15 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
星级党支部申报材料
2014/05/31 职场文书
搞笑的获奖感言
2014/08/16 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
公司年夜饭通知
2015/04/25 职场文书
读书笔记怎么写
2015/07/01 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技