python折半查找算法_跟黄哥学python序列文章之python二分查找算法
在计算机科学中,二分查找算法(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二分查找算法相关推荐
- python用*做三角形_我刚学这个,怎么用python表示三角形成立【python数字三角形教程】...
我刚学这个,怎么用python表示三角形成立 def Get_List(a,b,c): oList = [a,b,c] oList.sort() return oList a = raw_input( ...
- python新年快乐表情包_【新年快乐,跨年文章】Python 百度API 画出美美哒热力地图(代码 数据)...
作者:王大伟 Python爱好者社区唯一小编 博客:https://ask.hellobi.com/blog/wangdawei 关注Python爱好者社区回复热力地图即可获取本文数据和代码! 注:昨 ...
- 深入理解python.md_跟黄哥学python序列文章之python方法链(method chaining)
跟黄哥学python序列文章之python方法链(method chaining) 写这篇文章来由,有朋友说下面这样的代码看不懂. choice = raw_input("please in ...
- access 查找工龄大于30_面试前必知必会的二分查找及其变种
作者 | 袁厨 责编 | 张文 头图 | CSDN 下载自视觉中国 来源 | 袁厨的算法小屋(ID:tan45du_me) 今天给大家带来的是二分查找及其变种的总结. 袁记菜馆内. 店小二:掌柜的,您 ...
- python培训一般多久_零基础学python需要多久
一:明确自己的学习目标.不管我们学习什么样的知识,都要对自己的学习目标有一个明确的认识.只有这样才能朝着目标持续的前进,少走弯路,从而在学习的过程中得到提升,享受整个学习的乐趣. 二:基础的Pytho ...
- python嵌入shell代码_大家一起学python-Python基础1
本节内容 Python简介 Python的发展史 选择Python 2 还是python 3? Python安装 第一个Python程序 Python变量 学习怎么输入 数据类型 数据运算基础 表达式 ...
- 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...
AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于全国计算机等级(NCRE)体系调整"的通知,决定自2018年3月起,在全 ...
- python新手怎么入门_新手怎么学Python?Python入门必看!
原标题:新手怎么学Python?Python入门必看! 作为新手,学习一门编程语言无疑是一头雾水,上海尚观科技为了让大家在学习Python编程的时候,有一个学习方向,在这里给大家分享了的方法,希望能帮 ...
- std中稳定排序算法_源代码库已开放 | 哈工大硕士生用 Python 实现了 11 种经典数据降维算法...
转自:AI开发者 网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA ...
最新文章
- JSP生成word文件
- graphviz linux教程,程序员绘图利器 — Graphviz
- 狡猾无比的超级网络间谍
- dns服务器漏洞修复,KB4569509:DNS 服务器漏洞 CVE-2020-1350 指南
- html宽度自动填充,html – 创建一个td填充表宽度
- 自如被起诉索赔了!因装修致邻居家房屋漏水...
- 冯偌依曼计算机的基本原理是,软件《计算机组成原理》试卷 A
- 论文阅读笔记(三)——An Enhanced Hybrid MobileNet
- go导出mysql中的excel表_golang web 开发 从数据库 导出到excel案例
- 第五十七章 Caché 函数大全 $REPLACE 函数
- 数据分析基础篇---统计学基础
- jsp层级选择器_jQuery 选择器
- MySQL分组查询,获取分组后数据
- htonl htons ntohl ntohs inet_pton inet_ntop
- linux在文件夹下查找关键字,Linux 搜索目录和子目录下含有关键字的文件
- estimate和estimation
- 小说《小城恋情》第三十三章
- 个人常用命令集锦 持续更新
- 强攻 前端HTML5 渡一学习记录
- 男孩,请用几分钟看这篇文章(女孩别看,会哭 )
热门文章
- 随机迷宫生成算法——深度优先算法
- 小世界网络matlab程序,matlab的dijkstra算法问题(小世界网络)
- 深入了解ios系统机制
- 系统开发视角下的诊断 ———— 动力系统(P)诊断故障9
- 提高独立解决问题的能力
- uni-app开发 小程序直播功能
- 双圆环环布带系法图解_22种绳结的绑法,受用无穷,值得收藏!
- 3g android4 移植 飞思卡尔i.MX 6Quad Android 4.2.2的中兴和Ublox 3G驱动移植 Android——4.2 - 3G移植之路
- 苹果浏览器滚动会卡顿的问题
- 基于形态学运算的图像变换