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 相关文章推荐
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
wxPython实现窗口用图片做背景
Apr 25 Python
便捷提取python导入包的属性方法
Oct 15 Python
python实现简单flappy bird
Dec 24 Python
python实现图片彩色转化为素描
Jan 15 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
python实现词法分析器
Jan 31 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 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的FTP学习(四)
2006/10/09 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
smarty自定义函数用法示例
2016/05/20 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python递归实现快速排序
2018/08/18 Python
Form表单及django的form表单的补充
2019/07/25 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python 瀑布线指标编写实例
2020/06/03 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
房地产广告词大全
2014/03/19 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
python内置模块之上下文管理contextlib
2022/06/14 Python
nginx之queue的具体使用
2022/06/28 Servers