简介二分查找算法与相关的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获取本机外网ip的方法
Apr 15 Python
python如何定义带参数的装饰器
Mar 20 Python
Python global全局变量函数详解
Sep 18 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
代码实例讲解python3的编码问题
Jul 08 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
七个Python必备的GUI库
Apr 27 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中取得image按钮传递的name值
2006/10/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python连接oracle数据库实例
2014/10/17 Python
详解Python中的Cookie模块使用
2015/07/06 Python
python根据京东商品url获取产品价格
2015/08/09 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
总经理助理岗位职责
2013/11/08 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
《画风》教学反思
2014/04/16 职场文书
实习介绍信模板
2015/01/30 职场文书
万里长城导游词
2015/01/30 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫