二分搜索算法python,一个运用二分查找算法
二进制搜索,也称为二分搜索法,是一种高效的搜索方法。本文将介绍python如何实现二分搜索法算法,帮助您更好地理解和使用python。感兴趣的朋友可以了解一下。
00-1010 1.算法描述2。算法分析3。算法思路4。代码实现纯算法实现递归方法实现
目录
二分法是一种有效的搜索方法。
回想一下自己以前做过的猜数字的小游戏,事先给一个小于100的正整数X,这样就可以猜出游戏的大小,并询问如何快速猜出。
我们之前玩的游戏被给了10次机会。如果我们学习二分搜索法方法,不管数字是什么,最多只需要猜7次。
1. 算法描述
1.它必须是一个有序的序列。
2.对数据的大小有要求。
数据量对于二分搜索法来说太小,效率提升相对于直接遍历并不明显。
如果数据量太大,就不适合二分搜索法,因为阵列需要连续的内存空间。如果数据量过大,往往无法找到连续的内存空间来存储如此大规模的数据。
2. 算法分析
假设有一个有序列表如下:3360
请问数字11在这个列表中吗,如果是,它的索引值是多少?
3. 算法思路
4. 代码实现
实现代码
arr_list=[5,7,11,22,27,33,39,52,58]
#要查找的号码
seek_number=11
#一共救了几次。
计数=0
#列表左侧的索引
左=0
#列表右侧的索引
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))
破裂
else:
打印(“找不到编号% s“% seek _ number”)
打印(花费了:%s次查找 %计数)
运行结果
纯算法实现
变量计数在循环中定义。如果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:
返回中间
#进行递归调用
返回binary_search(seek_number,left,right)
#当左索引大于右索引时,表示没有找到。
else:
返回-1
#要查找的号码
seek_number=11
#列表左侧的索引
左=0
#列表右侧的索引
right=len(arr_list) - 1
Print(找到的编号:%s,索引:% s% (seek _ number,binary _ search (seek _ number,left,right)))
运行结果
以上是Python算法练习二分搜索法算法实现的详细内容。更多关于Python二分搜索法算法的信息,请关注热门IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。