二分搜索算法python,Python二分法查找
本文为大家带来了一些关于python的知识,主要梳理了二分搜索法算法的相关问题,包括算法描述、算法分析、算法思想等等。下面就来看看吧,希望对你有帮助。
推荐:python视频教程
00-1010二分法是一种高效的搜索方法。
回想一下自己以前做过的猜数字的小游戏,事先给一个小于100的正整数X,这样就可以猜出游戏的大小,并询问如何快速猜出。
我们之前玩的游戏被给了10次机会。如果我们学习二分搜索法方法,不管数字是什么,最多只需要猜7次。
00-1010 1.它必须是一个有序的序列。
2.对数据的大小有要求。
数据量对于二分搜索法来说太小,效率提升相对于直接遍历并不明显。
如果数据量太大,就不适合二分搜索法,因为阵列需要连续的内存空间。如果数据量过大,往往无法找到连续的内存空间来存储如此大规模的数据。
00-1010假设存在如下有序列表3360
请问数字11在这个列表中吗,如果是,它的索引值是多少?
00-1010实施代码:
Arr _ list=[5,7,11,22,27,33,39,52,58] #数字查找seek_number=11#保存多少次?count=0# List左索引left=0# List右索引right=len(arr_list)-1#当左侧
#取中间的索引位置
middle=(左右)//2
#累计搜索次数。
计数=1
#如果您要查找的数字大于中间的数字
if seek _ number arr _ list[middle]:
#左索引是中间索引1。
左=中间1
#如果你要找的数字比中间的数字小
elif seek _ number arr _ list[middle]:
#右索引是中间索引-1。
右=中间- 1
#如果等于中间索引数据
else:
Print(找到编号:%s,索引值为:%s% (seek_number,middle))
breakelse:
打印(编号%s未找到 %seek _ number )打印(用了% s次找到 % count )运行结果:
00-1010定义循环中的变量计数。如果count在第一次循环后没有变化,这意味着输入是一个有序序列。这时,我们直接返回退出循环。此时时间复杂度为O(n)
实施代码:
arr_list=[5,7,11,22,27,33,39,52,58]def二进制搜索(seek_number,left,right):
如果左=右:
middle=(左右)//2
if seek _ number arr _ list[middle]:
右=中间- 1
elif seek _ number arr _ list[middle]:
左=中间1
else:
Return middle #进行递归调用
返回binary_search(seek_number,left,right)
#当左索引大于右索引时,表示没有找到。
else:
Return -1#查找的数字=11 #列表的左索引=0 #列表的右索引=len (arr _ list)-1print(查找的数字:%s,索引:% s% (seek _ number,binary _ search (seek _ number,Left,Right))
推荐:python视频教程以上是Python详细分析二分搜索法算法的详细内容。更多信息请关注盛行IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。