在计算机科学中,二分查找算法(binary search)、也称折半搜索(英语:half-interval search),

二分搜索法、二分搜索、二分探索,是一种在有序数组中查找某一特定元素的搜索算法。

搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;

如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,

而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。

这种搜索算法每一次比较都使搜索范围缩小一半。 (来源于维基百科)

二分查找循环版

#! /usr/bin/python

# coding:utf-8

def binary_search_while(key, arr):

'''list 必须是排序好的

黄哥python培训_python编程思路之四 咨询qq:1465376564

http://www.tudou.com/programs/view/Z4IClY5Wj-g/

运维如何通过学习python学会编程

https://github.com/pythonpeixun/article/blob/master/python/how_to_learn_python.md

黄哥python远程视频培训班

https://github.com/pythonpeixun/article/blob/master/index.md

黄哥python培训试看视频播放地址

https://github.com/pythonpeixun/article/blob/master/python_shiping.md

'''

start = 0

end = len(arr) - 1

while start <= end:

mid = start + (end - start) // 2

if arr[mid] < key:

start = mid + 1

elif arr[mid] > key:

end = mid - 1

else:

return mid

return -1

if __name__ == '__main__':

arr = [3, 9, 28, 67, 12, 45]

arr.sort()

print(binary_search_while(12, arr))

print(binary_search_while(3, arr))

print(binary_search_while(9, arr))

print(binary_search_while(99, arr))

#二分查找递归版

#! /usr/bin/python

# coding:utf-8

def binary_search_recursion(key, arr, start, end):

'''list 必须是排序好的

黄哥python培训_python编程思路之四 咨询qq:1465376564

http://www.tudou.com/programs/view/Z4IClY5Wj-g/

运维如何通过学习python学会编程

https://github.com/pythonpeixun/article/blob/master/python/how_to_learn_python.md

黄哥python远程视频培训班

https://github.com/pythonpeixun/article/blob/master/index.md

黄哥python培训试看视频播放地址

https://github.com/pythonpeixun/article/blob/master/python_shiping.md

'''

if start > end:

return -1

mid = start + (end - start) // 2

if arr[mid] > key:

return binary_search_recursion(key, arr, start, mid - 1)

if arr[mid] < key:

return binary_search_recursion(key, arr, mid + 1, end)

return mid

if __name__ == '__main__':

arr = [3, 9, 28, 67, 12, 45]

arr.sort()

print(binary_search_recursion(12, arr, 0, len(arr)-1))

print(binary_search_recursion(3, arr, 0, len(arr)-1))

print(binary_search_recursion(9, arr, 0, len(arr)-1))

print(binary_search_recursion(99, arr, 0, len(arr)-1))

用途实例:

白名单过滤,有一家商业银行,将数千万客户名单保存为文本文件中,为白名单。

白名单处理成排序好的数组。可以用二分查找算法快速排除用户账号是不是银行的客户。

python折半查找算法_跟黄哥学python序列文章之python二分查找算法相关推荐

  1. python用*做三角形_我刚学这个,怎么用python表示三角形成立【python数字三角形教程】...

    我刚学这个,怎么用python表示三角形成立 def Get_List(a,b,c): oList = [a,b,c] oList.sort() return oList a = raw_input( ...

  2. python新年快乐表情包_【新年快乐,跨年文章】Python 百度API 画出美美哒热力地图(代码 数据)...

    作者:王大伟 Python爱好者社区唯一小编 博客:https://ask.hellobi.com/blog/wangdawei 关注Python爱好者社区回复热力地图即可获取本文数据和代码! 注:昨 ...

  3. 深入理解python.md_跟黄哥学python序列文章之python方法链(method chaining)

    跟黄哥学python序列文章之python方法链(method chaining) 写这篇文章来由,有朋友说下面这样的代码看不懂. choice = raw_input("please in ...

  4. access 查找工龄大于30_面试前必知必会的二分查找及其变种

    作者 | 袁厨 责编 | 张文 头图 | CSDN 下载自视觉中国 来源 | 袁厨的算法小屋(ID:tan45du_me) 今天给大家带来的是二分查找及其变种的总结. 袁记菜馆内. 店小二:掌柜的,您 ...

  5. python培训一般多久_零基础学python需要多久

    一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...

  6. python嵌入shell代码_大家一起学python-Python基础1

    本节内容 Python简介 Python的发展史 选择Python 2 还是python 3? Python安装 第一个Python程序 Python变量 学习怎么输入 数据类型 数据运算基础 表达式 ...

  7. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...

    AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于全国计算机等级(NCRE)体系调整"的通知,决定自2018年3月起,在全 ...

  8. python新手怎么入门_新手怎么学Python?Python入门必看!

    原标题:新手怎么学Python?Python入门必看! 作为新手,学习一门编程语言无疑是一头雾水,上海尚观科技为了让大家在学习Python编程的时候,有一个学习方向,在这里给大家分享了的方法,希望能帮 ...

  9. std中稳定排序算法_源代码库已开放 | 哈工大硕士生用 Python 实现了 11 种经典数据降维算法...

    转自:AI开发者 网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA ...

最新文章

  1. JSP生成word文件
  2. graphviz linux教程,程序员绘图利器 — Graphviz
  3. 狡猾无比的超级网络间谍
  4. dns服务器漏洞修复,KB4569509:DNS 服务器漏洞 CVE-2020-1350 指南
  5. html宽度自动填充,html – 创建一个td填充表宽度
  6. 自如被起诉索赔了!因装修致邻居家房屋漏水...
  7. 冯偌依曼计算机的基本原理是,软件《计算机组成原理》试卷 A
  8. 论文阅读笔记(三)——An Enhanced Hybrid MobileNet
  9. go导出mysql中的excel表_golang web 开发 从数据库 导出到excel案例
  10. 第五十七章 Caché 函数大全 $REPLACE 函数
  11. 数据分析基础篇---统计学基础
  12. jsp层级选择器_jQuery 选择器
  13. MySQL分组查询,获取分组后数据
  14. htonl htons ntohl ntohs inet_pton inet_ntop
  15. linux在文件夹下查找关键字,Linux 搜索目录和子目录下含有关键字的文件
  16. estimate和estimation
  17. 小说《小城恋情》第三十三章
  18. 个人常用命令集锦 持续更新
  19. 强攻 前端HTML5 渡一学习记录
  20. 男孩,请用几分钟看这篇文章(女孩别看,会哭 )

热门文章

  1. 随机迷宫生成算法——深度优先算法
  2. 小世界网络matlab程序,matlab的dijkstra算法问题(小世界网络)
  3. 深入了解ios系统机制
  4. 系统开发视角下的诊断 ———— 动力系统(P)诊断故障9
  5. 提高独立解决问题的能力
  6. uni-app开发 小程序直播功能
  7. 双圆环环布带系法图解_22种绳结的绑法,受用无穷,值得收藏!
  8. 3g android4 移植 飞思卡尔i.MX 6Quad Android 4.2.2的中兴和Ublox 3G驱动移植 Android——4.2 - 3G移植之路
  9. 苹果浏览器滚动会卡顿的问题
  10. 基于形态学运算的图像变换