python-二分查找
Posted whileke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-二分查找相关的知识,希望对你有一定的参考价值。
1.while循环实现
li = [1,4,6,8,9,10,15,18] left = 0 right = len(li)-1 n = 99 while 1: if left<right: mid = (left+right)//2 if n>li[mid]: left = mid + 1 if n <li[mid]: right = mid-1 if n==li[mid]: print("找到了") break else: print("找不到") break
2.递归实现
li = [1,4,6,8,9,10,15,18] def func(n,left,right): if left<=right: mid = (left+right)//2 if n<li[mid]: right = mid-1 return func(n,left,right) # 但你用了递归后要返回一个值,前面的所有都要返回,不然是返回不到的 if n>li[mid]: left = mid + 1 return func(n,left,right) if n==li[mid]: print("找到了") return mid # 返回索引 else: print("找不到") return -1 a =func(4,0,len(li)-1) print(a)
3.另类方法实现,缺点(无法准确计算出第n个数原列表的索引)
lst = [1,2,5,7,9,25,35,43,47,49,55,58,61] def func(lst,taget): left = 0 right = len(lst)-1 if left>right: print("找不到") else: mid = (left+right)//2 if taget>lst[mid]: return func(lst[mid+1:],taget) elif taget<lst[mid]: return func(lst[:mid],taget) else: print("找到了") return func(lst,56)
以上是关于python-二分查找的主要内容,如果未能解决你的问题,请参考以下文章