python实现二分查找算法


Posted in Python onSeptember 21, 2017

二分查找算法:简单的说,就是将一个数组先排序好,比如按照从小到大的顺序排列好,当给定一个数据,比如target,查找target在数组中的位置时,可以先找到数组中间的数array[middle]和target进行比较,当它比target小时,那么target一定是在数组的右边,反之,则target在数组的左边,比如它比target小,则下次就可以只比较[middle+1, end]的数,继续使用二分法,将它一分为二,直到找到target这个数返回或者数组全部遍历完成(target不在数组中)

优点:效率高,时间复杂度为O(logN);
缺点:数据要是有序的,顺序存储。

python的代码实现如下:

#!/usr/bin/python env
# -*- coding:utf-8 -*-

def half_search(array,target):
  low = 0
  high = len(array) - 1
  while low < high:
     mid = (low + high)/2
     if array[mid] > target:
      high = mid - 1
     elif array[mid] < target:
      low = mid + 1
     elif array[mid] == target:
      print 'I find it! It is in the position of:',mid
      return mid
     else:
      print "please contact the coder!"
  return -1



if __name__ == "__main__":
  array = [1, 2, 2, 4, 4, 5]

运行结果如下:

I find it! It is in the position of: 4
4
-1
I find it! It is in the position of: 0
0
-1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pymongo实现多结果进行多列排序的方法
May 16 Python
Python中字符串对齐方法介绍
May 21 Python
Python线程详解
Jun 24 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
Python操作MySQL数据库的方法
Jun 20 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python常用模块logging——日志输出功能(示例代码)
Nov 20 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
Python处理PDF与CDF实例
Feb 26 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Django 实现jwt认证的示例
Apr 30 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 Python
分享给Python新手们的几道简单练习题
Sep 21 #Python
python验证码识别的示例代码
Sep 21 #Python
Python优先队列实现方法示例
Sep 21 #Python
python虚拟环境virtualenv的安装与使用
Sep 21 #Python
基于python socketserver框架全面解析
Sep 21 #Python
基于python select.select模块通信的实例讲解
Sep 21 #Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 #Python
You might like
实现了一个PHP5的getter/setter基类的代码
2007/02/25 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
详解webpack 多入口配置
2017/06/16 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python常见数字运算操作实例小结
2019/03/22 Python
python实现简单日期工具类
2019/04/24 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
python实现猜数游戏
2020/03/27 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
偷看我的初中毕业鉴定
2014/01/29 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
道歉情书大全
2015/05/12 职场文书