Python实现二分法算法实例


Posted in Python onFebruary 02, 2015

1.算法:(设查找的数组期间为array[low, high])

(1)确定该期间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:

a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]
b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找,即可。

#!/usr/bin/python

# -*- coding: utf-8 -*-
def BinarySearch(array,t):

low = 0

height = len(array)-1

while low <= height:

mid = (low+height)/2

if array[mid] < t:

low = mid + 1
elif array[mid] > t:

height = mid - 1
else:

return array[mid]
return -1
if __name__ == "__main__":

print BinarySearch([1,2,3,34,56,57,78,87],57)

结果:57

3.时间复杂度:O(log2n);

注意:二分查找的前提必须待查找的序列有序。

Python 相关文章推荐
python获取元素在数组中索引号的方法
Jul 15 Python
使用Django的模版来配合字符串翻译工作
Jul 27 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
python模块smtplib学习
May 22 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
Python3基于print打印带颜色字符串
Jul 06 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
Python标准异常和异常处理详解
Feb 02 #Python
Python中使用md5sum检查目录中相同文件代码分享
Feb 02 #Python
Python列表append和+的区别浅析
Feb 02 #Python
Python中的tuple元组详细介绍
Feb 02 #Python
Linux下编译安装MySQL-Python教程
Feb 02 #Python
Python写的服务监控程序实例
Jan 31 #Python
用python 制作图片转pdf工具
Jan 30 #Python
You might like
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
Yii配置文件用法详解
2014/12/04 PHP
php读取csc文件并输出
2015/05/21 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
汉语言文学毕业求职信
2014/07/17 职场文书
商场广播稿范文
2015/08/19 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android