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中的正则表达式(re模块)
Oct 17 Python
python机器学习之神经网络实现
Oct 13 Python
pytorch使用Variable实现线性回归
May 21 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
python 读取串口数据的示例
Nov 09 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
Selenium浏览器自动化如何上传文件
Apr 06 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项目应该注意的几点事项分享
2013/12/20 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
2014/01/09 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
基于vue.js实现分页查询功能
2018/12/29 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
python列表去重的二种方法
2014/02/14 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python创建数字列表的示例
2019/11/28 Python
Python中求对数方法总结
2020/03/10 Python
python deque模块简单使用代码实例
2020/03/12 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
Python如何安装第三方模块
2020/05/28 Python
python3 kubernetes api的使用示例
2021/01/12 Python
农村婚礼主持词
2014/03/13 职场文书
应用数学专业求职信
2014/03/14 职场文书
产品发布会策划方案
2014/05/12 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
学习党史心得体会2016
2016/01/23 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL