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 相关文章推荐
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
使用Python在Windows下获取USB PID&amp;VID的方法
Jul 02 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
python构造函数init实例方法解析
Jan 19 Python
Django中的session用法详解
Mar 09 Python
vue常用指令代码实例总结
Mar 16 Python
Jupyter加载文件的实现方法
Apr 14 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
Elasticsearch 数据类型及管理
Apr 19 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
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
JS中表单的使用小结
2014/01/11 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
JavaScript使用RegExp进行正则匹配的方法
2015/07/11 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
详解vue-router基本使用
2017/04/18 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python贪吃蛇游戏编写代码
2020/10/26 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
《美丽的彩虹》教学反思
2014/02/25 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
分家协议书范本
2016/03/22 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python