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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
实例讲解Python中整数的最大值输出
Mar 17 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
详解Python的三种拷贝方式
Feb 11 Python
Python list和str互转的实现示例
Nov 16 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支持断点续传的源码
2010/05/16 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
2018/09/19 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
实践Vim配置python开发环境
2018/07/02 Python
python 拼接文件路径的方法
2018/10/23 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
Django使用rest_framework写出API
2020/05/21 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
起诉书格式范文
2015/05/20 职场文书
开学随笔
2015/08/15 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
Python 的 sum() Pythonic 的求和方法详细
2021/10/16 Python