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 socket 超时设置 errno 10054
Jul 01 Python
Python操作MySQL简单实现方法
Jan 26 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
日常整理python执行系统命令的常见方法(全)
Oct 22 Python
python简单实现刷新智联简历
Mar 30 Python
python去除扩展名的实例讲解
Apr 23 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python算法题 链表反转详解
Jul 02 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
Python一行代码实现自动发邮件功能
May 30 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python异常触发及自定义异常类解析
2019/08/06 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
优秀的毕业生的自我评价
2013/12/12 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
2014和解协议书范文
2014/09/15 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js