如果想要在有序数据中进行查找想要的数据,二分查找法就个好方法,它可以大大缩短了搜索时间,是一种常见的查找方法。二分查找很好写,却很难写对,下面,小编就简单向大家介绍一下二分查找,并演示器使用代码。

1、二分查找

在一个有序并且无重复的列表中,对该列表的元素进行查找。

2、特点

(1)必须针对于有序列表

(2)该列表必须无重复

(3)按下标索引查找

3、使用方法

非递归实现:

def binary_search(alist, item):

"""二分查找 非递归方式"""

n = len(alist)

start = 0

end = n - 1

while start <= end:

mid = (start + end) // 2

if alist[mid] == item:

return True

elif item < alist[mid]:

end = mid - 1

else:

start = mid + 1

return False

if __name__ == '__main__':

li = [17, 20, 26, 31, 44, 54, 55, 77, 93]

# print(binary_search(li, 55))

# print(binary_search(li, 100))

递归实现:

def binary_search_2(alist, item):

"""二分查找 递归方式"""

n = len(alist)

if 0 == n:

return False

mid = n // 2

if alist[mid] == item:

return True

elif item < alist[mid]:

return binary_search_2(alist[:mid], item)

else:

return binary_search_2(alist[mid + 1:], item)

if __name__ == '__main__':

li = [17, 20, 26, 31, 44, 54, 55, 77, 93]

# print(binary_search(li, 55))

# print(binary_search(li, 100))

基础知识点扩展:

介绍

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

前提

必须待查找的序列有序

时间复杂度

O(log2n)

原理

1)确定该期间的中间位置K

2)将查找的值t与array[k]比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。

3)区域确定过程:

若array[k]>t,由于数组有序,所以array[k,k+1,……,high]>t;故新的区间为array[low, ..., K-1];

反之,若array[k]

到此这篇关于python中二分查找法的实现方法的文章就介绍到这了,更多相关python中二分查找法如何实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python中二分查找什么意思_python中二分查找法的实现方法相关推荐

  1. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  2. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  3. python选取元音开头的单词_Python中的Regex,用于查找遵循以下模式的单词:元音、辅音、元音、辅音...

    如果将辅音有向图映射成单个辅音,则最长的单词是解剖病理学的10*VC字符串. 如果您正确映射y,那么您将得到完整的字符串,如乙酰丙酮作为8*VC,下胚轴作为8*CV. 如果不需要字符串是完整的,那么在 ...

  4. python的init有什么用_Python中 __init__.py的作用

    我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 标识该目录是一个python的模块包(module package ...

  5. list可以存放python中任意类型的数据_Python中常见的数据类型小结

    Python提供多种数据类型来存放数据项集合,主要包括序列(列表list和元组tuple),映射(如字典dict),集合(set),下面对这几种一一介绍: 一 序列 1.列表list 列表是一种有序的 ...

  6. python语言的取余运算符_Python 中用于整数除法取余的运算符是()_学小易找答案...

    [填空题]隐球菌病多由()传播. [单选题]下列选项中,哪一个符号是管道符号. ( ) [多选题]可采用分批法计算产品成本的企业有( ) [填空题]现有字符串 s="1234567" ...

  7. python 打开本地程序发生异常_Python中的异常处理

    Python中的异常事件: 当Python遇到无法正常处理的事件时,便是异常发生的时候,Python将异常也当作一个对象,尽管他是出错的.当发生异常时候我们要捕获他,否则程序就会中断运行. Pytho ...

  8. python的内建数据结构包括_Python中3种内建数据结构:列表、元组和字典

    Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.假想你有一个购物列表,上面 ...

  9. python中reversed是什么意思_Python reversed函数及使用方法解析

    Python reversed函数及使用方法解析 有些时候,程序需要进行反向遍历,此时可通过 reversed() 函数,该函数可接收各种序列(元组.列表.区间等)参数,然后返回一个"反序排 ...

最新文章

  1. jquery之hide()用法详解
  2. TensorFlow models/research
  3. python封装:隐藏对象中的属性或方法(三分钟读懂)
  4. easyui中动态使datebox、combobox为只读状态
  5. 修改MySQL用户的host属性_如何快速修改MySQL用户的host属性
  6. 深入剖析Android音频(二)AudioSystem
  7. nslookup get public/external IP
  8. php big5 转utf8,php如何实现big5转utf8
  9. python关闭线程池_python线程池
  10. 迅雷对非会员进行下载限速的解决方案
  11. 超级好用的电脑截图翻译软件你值得拥有!
  12. 浏览器主页被劫持成360导航
  13. 微信小程序添加体验成员,根据微信号搜索不到
  14. CSDN 修改名字昵称以及ID 修改博客标题 - 告别自动生成的 id (亲测有效!)
  15. 世界上读书最多的国家(以色列人均64本)
  16. 数字媒体概论——声音
  17. 数字图像处理知识点梳理——第八章 图像压缩
  18. mac终端命令(苹果终端命令)
  19. 压力变送器的特点及用途与维护
  20. day2学python 数据类型+深浅拷贝+循环

热门文章

  1. 开了gomod不识别gopath_三分钟掌握Go mod常用与高级操作
  2. 20211003 矩阵的值域(列空间)和核空间(零空间)
  3. 业务逻辑中的测试总结(二)----业务与数据库交互需求的测试分解
  4. ubuntu基于apache+postgresql编译安装zabbix
  5. [解决]Win7+Tomcat5.5 只能通过localhost或计算机名访问
  6. ASP.NET缓存全解析4:应用程序数据缓存(转)
  7. 密码6-12位数字和字母组成
  8. 【下载】推荐一款免费的人脸识别SDK
  9. DB2查询结果显示n行
  10. java中日期类型与字符串相互转换