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运用于数据分析的简单教程
Mar 27 Python
Python中的浮点数原理与运算分析
Oct 12 Python
Python实现中一次读取多个值的方法
Apr 22 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
详解用python自制微信机器人,定时发送天气预报
Mar 25 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
解决python中import文件夹下面py文件报错问题
Jun 01 Python
python实现发送带附件的邮件代码分享
Sep 22 Python
Python os库常用操作代码汇总
Nov 03 Python
Django跨域请求原理及实现代码
Nov 14 Python
python实现计算图形面积
Feb 22 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 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读取excel文件的简单实例
2013/08/26 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
javascript回到顶部特效
2016/07/30 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
在vue中给列表中的奇数行添加class的实现方法
2018/09/05 Javascript
Vue.js的动态组件模板的实现
2018/11/26 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python实现可视化动态CPU性能监控
2018/06/21 Python
python集合是否可变总结
2019/06/20 Python
浅析python内置模块collections
2019/11/15 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
使用CSS禁止textarea调整大小功能的方法
2015/03/13 HTML / CSS
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
工商管理实习自我鉴定
2013/09/28 职场文书
临床医师专业个人自我评价
2014/01/08 职场文书
求职自荐信怎么写
2014/03/06 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
人民调解员培训方案
2014/06/05 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
幼儿园门卫安全责任书
2015/05/08 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
2019教师的学习计划
2019/06/25 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android