查找 —— 二分查找[递归+非递归]

Posted 叽叽喳喳,嘻嘻哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找 —— 二分查找[递归+非递归]相关的知识,希望对你有一定的参考价值。

二分查找

 

二分查找是对一组有序序列进行查找。根据要查找的k和序列中间元素比较,动态的移动查找范围。以对折的方式缩小查找范围。

 

递归方式:

def binarySearch(A,left,right,k):
    if left<= right:
        mid =(left+right)//2
        if  A[mid] == k:
            return mid
        if A[mid]>k:
            return binarySearch(A,left,mid-1,k) #此处要返回函数运行结果而不是仅仅调用函数
        else:
            return binarySearch(A,mid+1,right,k)
    else:
        return -1

A= [1,2,3,4,5,6,7]
left = 0
right = len(A)-1
print(binarySearch(A,left,right,3))

非递归方式:

def binarySearch(A,k):
    left = 0
    right =len(A)-1
    while left<=right:
        mid = (right+left)//2
        if A[mid] == k:
            return mid
        if A[mid]>k:
            right = mid-1
        else:
            left = mid+1
    return -1

a = [1,2,3,4,5]
print(binarySearch(a,1))

 

以上是关于查找 —— 二分查找[递归+非递归]的主要内容,如果未能解决你的问题,请参考以下文章

2019.9.25-二分查找代码(递归和非递归方法)

递归和非递归的二分查找

查找 —— 二分查找[递归+非递归]

Day589.二分查找(非递归) -数据结构和算法Java

算法拾遗二分查找递归非递归实现

二分查找非递归算法实现