python 二分查找的三种方式
⼆分查找. 每次能够排除掉一半的数据. 查找的效率非常高. 但是局限性比较大. 必须是有序列才可以使用二分查找
要求: 查找的序列必须是有序序列.
三种方法:
# 纯算法
lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789]
n = 567
left = 0
right = len(lst)-1
count = 1
while left <= right :
middle = (left +right) // 2
if n > lst[middle] :
left = middle + 1
elif n < lst[middle] :
right = middle -1
else :
print(count)
print("存在")
print(middle)
break
count += 1
else :
print("不存在")
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#递归法
# lst = [11, 22, 33, 44, 55, 66, 77, 88, 99, 123, 234, 345, 456, 567, 678, 789]
def binary_search(n,left,right):
if left <= right :
middle = (left+right) // 2
if n <lst[middle] :
right = middle -1
elif n >lst[middle]:
left = middle + 1
else :
return middle
return binary_search(n,left,right) # 不加return返回永远是None
else :
return -1 #没有找到
print(binary_search(567,0,len(lst)-1)
#l另类方法
def biinary_search(ls,target):
left = 0
right = len(ls) - 1
if left > right:
print("不不在这⾥里里")
middle = (left + right) // 2
if target < ls[middle]:
return binary_search(ls[:middle], target)
elif target > ls[middle]:
return binary_search(ls[middle+1:], target)
else:
print("在这⾥里里")
binary_search(lst, 567)
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16762180.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义