python二分法查找算法实现方法【递归与非递归】
作者:xlengji 发布时间:2023-04-17 08:13:47
标签:python,二分法查找,算法
本文实例讲述了python二分法查找算法实现方法。分享给大家供大家参考,具体如下:
二分法查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
二分法查找实现
(非递归实现)
def binary_search(alist, item):
first = 0
last = len(alist)-1
while first<=last:
midpoint = (first + last)/2
if alist[midpoint] == item:
return True
elif item < alist[midpoint]:
last = midpoint-1
else:
first = midpoint+1
return False
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))
(递归实现)
def binary_search(alist, item):
if len(alist) == 0:
return False
else:
midpoint = len(alist)//2
if alist[midpoint]==item:
return True
else:
if item<alist[midpoint]:
return binary_search(alist[:midpoint],item)
else:
return binary_search(alist[midpoint+1:],item)
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))
运行结果:
False
True
时间复杂度
最优时间复杂度:O(1)
最坏时间复杂度:O(logn)
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/xlengji/article/details/82147639
0
投稿
猜你喜欢
- 本文实例讲述了CentOS7环境下源码安装MySQL5.7的方法。分享给大家供大家参考,具体如下:安装依赖包yum -y install a
- 今天刚接触python,查看了一些环境建立的文章,可能是年代久远很多都不适用,现在mac搭建python环境变得更简单。大神勿喷。首先去py
- 在 Django 网站中使用 mailgun 的邮件收发服务。1.在 mailgun 官网上注册个账号(免费,免费账号每个月有10000条收
- 1.tensor张量与numpy相互转换tensor ----->numpyimport torcha=torch.ones([2,5
- 上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第
- 本文实例为大家分享了JavaScript实现alert弹框的具体代码,供大家参考,具体内容如下因本人水平有限,不足之处还望大家指正。先上图:
- fmtGo语言用于控制文本输出常用的标准库是fmtfmt中主要用于输出的函数有:Print: 输出到控制台,不接受任何格式化操作Printl
- 对于那些需要在登录环境下进行的爬虫操作,模拟登陆或伪装已登录状态是一个刚需。分析了网上关于模拟登录的例子,很多都基于用户名/密码发起一个po
- cron是什么cron的意思就是:计划任务,说白了就是定时任务。我和系统约个时间,你在几点几分几秒或者每隔几分钟跑一个任务(job),就那么
- 一、回顾一下CONVERT()的语法格式:CONVERT (<data_ type>[ length ], <expres
- 介绍Go使用goroutines来处理connection的读写事件,不会阻塞:c, err := srv.newConn(rw) &nbs
- 本文实例为大家分享了Virginia无密钥解密的具体代码,供大家参考,具体内容如下加密virginia加密是一种多表替换加密方法,通过这种方
- 从网上找了很多django单元测试的案例,感觉不是很好用,于是自己写了一套测试方法,在测试环境我们只需要传uri 、请求方式、参数即可
- 如何实现自定义一个异常python内置了许多异常类,为编写代码划定红线,才使调试代码时能及时发现错误。那么我们编写一个模块也可以为使用此模块
- 除了使用pycharm外,还可使用vscode来操作pyqt,方法如下:1. 在vscode中配置相关的pyqt的相关根据自己实际情况修改第
- 前言近来chatGPT挺火的,也试玩了一下,确实挺有意思。这里记录一下在Python中如何去使用chatGPT。本篇文章的实现100%基于
- python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。得到当前工作目录,即当前Python脚本工作的目录路
- staytime.asp<% If Request.QueryString("time")&n
- 1、单个像素(画点)利用pygame画点主要有三种方法:方法一:画长宽为1个像素的正方形import pygame,syspygame.in
- vue-cli使用stimulsoft.reports.js(保姆级教程)第一部分:数据源准备以下是JSON数据的教程json数据结构{&q