python二分法查找

常见的搜索方法:顺序查找、二分法查找、二叉树查找、哈希查找。

二分法查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。


二分法查找算法有递归和非递归两种方法。

'''
二分法查找
'''def binary_search(aList, item):'''递归的方式'''n = len(aList)if n < 1:return Falsemid = n // 2first_index = 0print(aList[mid], item)if aList[mid] == item:return Trueelif aList[mid] > item:return binary_search(aList[:mid], item)else:return binary_search(aList[mid + 1:], item)return Falsedef binary_search_01(aList, item):'''递归的方式'''n = len(aList)if n > 0:mid = n // 2first_index = 0print(aList[mid], item)if aList[mid] == item:return Trueelif aList[mid] > item:return binary_search(aList[:mid], item)else:return binary_search(aList[mid + 1:], item)return Falsedef binary_search_02(aList, item):n = len(aList)first_index = 0last_index = n - 1while first_index <= last_index:print(first_index, last_index)# 取中间值必须在循环里面,不然就不会跳出这个循环了。mid = (last_index + first_index) // 2if aList[mid] == item:return Trueelif aList[mid] > item:last_index = mid - 1else:first_index = mid + 1return Falseif __name__ == '__main__':li = [17, 20, 26, 31, 44, 54, 55, 77, 93]# print(binary_search(li, 1))# print(binary_search_01(li, 17))print(binary_search_02(li, 1))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在搜狗浏览器更换页面字体?搜狗浏览器更换页面字体的方法

搜狗浏览器是一款提供给用户更好体验的浏览器&#xff0c;该软件拥有众多好用的功能&#xff0c;给用户带来更便利的服务&#xff0c;但是有时候又觉得太单调了&#xff0c;想换个字体&#xff0c;体验下不一样的感受&#xff0c;又不知道在哪里更换&#xff0c;接下来&#xf…

Python 二叉树实现

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”&#xff08;left subtree&#xff09;和“右子树”&#xff08;right subtree&#xff09; 二叉树的节点表示以及树的创建 1、通过使用Node类中定义三个属性&#xff0c;分别为elem本身的值&#xff0c;还…

谷歌浏览器自动填充功能怎么开启?自动填充功能开启方法

为了避免用户在登录同一网站时频频输入账号、密码的现象&#xff0c;谷歌在自家的Chrome浏览器中贴心的加入了“自动填充功能”。那么&#xff0c;谷歌浏览器自动填充功能要怎么开启呢?不清楚操作方法的朋友&#xff0c;不妨收藏学习一下。 方法步骤 在Chrome地址栏输入“ch…

Python二叉树遍历

树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问&#xff0c;即依次对树中每个结点访问一次且仅访问一次&#xff0c;我们把这种对所有节点的访问称为遍历&#xff08;traversal&#xff09;。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,…

Win11开始菜单怎么从中间移到左边?

相信不少用户都已经安装上了Windows11系统&#xff0c;但是有许多用户针对Windows11的开始菜单在中间非常的不习惯&#xff0c;想要把开始菜单移动到左边&#xff0c;像Win10系统那样。那么具体要怎么操作呢?下面小编就带着大家一起看看吧! 操作方法&#xff1a; 1、首先&am…

【Python学习笔记】Python深拷贝和浅拷贝

Python中copy模块里面常用的两个方法copy.copy() 和copy.deepcopy()也就是浅拷贝和深拷贝 1、copy.deepcopy() 深拷贝&#xff0c;是对于一个对象所有层次的拷贝。 2、copy.copy()浅拷贝&#xff0c;一般来说是对最顶层对象的拷贝。另外浅拷贝对不可变类型&#xff08;如&…

如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程

作为一款开放源码的浏览器产品&#xff0c;火狐在国内也不乏粉丝。当然&#xff0c;这其中也有火狐浏览器上的插件功能的部分功劳&#xff0c;毕竟其要优于许多同类产品!那么&#xff0c;该如何为火狐浏览器添加附加组件呢?不清楚操作方法的朋友&#xff0c;还不赶紧来了解一下…

Python装饰器(一)

要学习装饰器&#xff0c;首先要知道闭包的东西。不过这里不再说闭包的东西了。 我们假设一个场景&#xff1a;假如在公司有多个开发部门&#xff0c;A、B....。现在A部门开发出了一个功能&#xff0c;然后其他部门去调用A部门开发的功能。 比如: 如下f1、f2...&#xff0c;是…

怎么在QQ浏览器上使用微信聊天?

操作步骤&#xff1a; 1、启动qq浏览器。在qq浏览器界面中的插件栏中&#xff0c;会自动出现微信图标&#xff0c;浏览器自带了微信网页版的插件; 怎么在QQ浏览器上使用微信聊天&#xff1f; 2、点击该图标&#xff0c;然后会弹出一个二维码的窗口&#xff0c;拿出您的手机&…

搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法

记忆功能清除方法如下&#xff1a; 1、打开搜狗输入法; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 2、进入搜狗主界面&#xff0c;点击右下角“我的”进入界面; 搜狗输入法怎么清除输入记忆 搜狗输入法清除输入记忆方法 3、进入“我的”界面&#xff0c;点击…

Python装饰器(二)

想再说一下装饰器的使用和原理。 之前已经说了装饰器的概念&#xff0c;和语法&#xff0c;这里想再进一步说一下几个装饰器的例子。 例子一&#xff1a; def makBlod(fn):def wrappen():return "<b>" fn() "</b>"return wrappendef makI…

Win11任务栏透明度怎么调整?Win11任务栏透明度设置教程

许多小伙伴最近在使用Windows11的时候&#xff0c;总觉得Windows11的任务栏的颜色非常的难堪&#xff0c;想要自己把任务栏调整到透明的&#xff0c;那么具体我们要怎么调整Windows11任务栏透明度呢?下面小编就为大家介绍一下吧! 操作方法&#xff1a; 1、首先&#xff0c;我…

谷歌浏览器下载的文件保存在哪里?

许多人在使用谷歌浏览器上网时都会下载一些好看的电影、电视、小说或可玩性较高的游戏&#xff0c;但在完成下载后&#xff0c;却不清楚自己下载的东西放在了哪里!这不禁令人更好奇&#xff0c;谷歌浏览器下载的文件保存在哪里?下面让我们来了解一下。 方法步骤 打开Chrome浏…

Chrome浏览器隐藏扩展插件图标

隐藏Chrome浏览器扩展插件的图标。 隐藏之后 把鼠标移动到 上面显示那个红色的位置就可以拖动鼠标&#xff0c;然后就可以隐藏了。

如何设置允许PP视频访问相机

下面和大家分享一下如何设置允许PP视频访问相机&#xff0c;希望可以帮助到有需要的朋友。 如何设置允许PP视频访问相机 1、打开pp视频。见下图 如何设置允许PP视频访问相机 2、点击右下角我的。见下图 如何设置允许PP视频访问相机 3、点击打开设置。见下图 如何设置允许…

Ubuntu下virtualenv 安装

1、安装 vitrualenv。 sudo pip install virtualenv 2、在 Ubuntu 中以及其衍生系统中执行如下命令安装。 sudo apt-get install python-virtualenv 3、找个存放目录&#xff0c;创建虚拟环境。 virtualenv my_env 这个时候里面的虚拟环境里面的python版本是主机里面pyth…

如何更换里讯浏览器的皮肤?里讯浏览器更换皮肤的方法

里讯浏览器是一款极速、纯净的浏览器&#xff0c;软件拥有多种颜色的皮肤&#xff0c;可以根据个人的喜好更换自己喜欢的颜色&#xff0c;那么&#xff0c;怎么进行换肤呢?下面就由小编来告诉大家里讯浏览器换肤的方法。 方法步骤 1、打开里讯浏览器软件。 如何更换里讯浏览…

urllib2.URLError: urlopen error [Errno 111] Connection refused

记录个还没解决的问题。下面爬虫代码是可以执行的&#xff0c;但是在我的Ubuntu的虚拟中刚开始是可以运行的&#xff0c;但是&#xff0c;后来不知道改了什么东西&#xff0c;用urllib2写的爬虫和用scrapy 的爬虫代码都不能运行了&#xff01;&#xff01;。 import urllib2 i…

腾讯视频如何设置主设备

1、进入腾讯视频&#xff0c;点击右下角【个人中心】。 腾讯视频下载安卓版_腾讯视频如何设置主设备 2、在个人中心页面&#xff0c;点击【设置】。 腾讯视频下载安卓版_腾讯视频如何设置主设备 3、进入设置&#xff0c;点击【共享设备管理】。 腾讯视频下载安卓版_腾讯视…

Linux命令-关机,重启

转自https://www.linuxidc.com/Linux/2009-05/20134.htm 重启 1、reboot2、showdown -r now 立刻重启(root 用户使用) 关机 1、halt 立刻关机2、poweroff 立刻关机