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 相关文章推荐
Python实现快速排序和插入排序算法及自定义排序的示例
Feb 16 Python
Python线程指南详细介绍
Jan 05 Python
Tesserocr库的正确安装方式
Oct 19 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
python实现通过flask和前端进行数据收发
Aug 22 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Django如何创作一个简单的最小程序
May 12 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
Python多线程实例教程
2014/09/06 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
Python爬虫文件下载图文教程
2018/12/23 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
Python2与Python3的区别实例总结
2019/04/17 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
python操作gitlab API过程解析
2019/12/27 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
总裁秘书岗位职责
2013/12/04 职场文书
推广活动策划方案
2014/08/23 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
防暑降温通知书
2015/04/27 职场文书
Python中常见的导入方式总结
2021/05/06 Python