用递归与非递归实现二分查找

题目

  • 考察点:算法
  • 难度: 中等
  • 题目:使用递归与非递归的方式实现二分查找

题目解析

非递归方式实现(Python)
def search(ordered_array, item):
    """
    ordered_array:有序数组
    item:被查找的元素
    """
    left, right = 0, len(ordered_array) - 1
    while left <= right:
        middle = (left + right) // 2
        if item < ordered_array[middle]:
            right = middle - 1
        elif item > ordered_array[middle]:
            left = middle + 1
        else:
            return middle
    return -1


  • 测试用例
def test_search():
    array = [1, 2, 3, 4, 5]
    assert search(array, 1) == 0
    assert search(array, 2) == 1
    assert search(array, 3) == 2
    assert search(array, 4) == 3
    assert search(array, 5) == 4


递归方式实现(Python)
def recursion_search(ordered_array, left, right, item):
    """
    ordered_array: 有序数组
    left: 最左边的索引,初始为0
    right: 最右边的索引,初始为长度-1
    item:被查找的元素
    """
    if right >= left:
        mid = int(left + (right - left) / 2)
        if ordered_array[mid] == item:
            return mid
        elif ordered_array[mid] > item:
            return recursion_search(ordered_array, left, mid - 1, item)
        else:
            return recursion_search(ordered_array, mid + 1, right, item)
    else:
        return -1

  • 非递归方式
def test_recursion_search():
    arr = [2, 3, 4, 10, 40]
    assert recursion_search(arr, 0, len(arr) - 1, 2) == 0
    assert recursion_search(arr, 0, len(arr) - 1, 3) == 1
    assert recursion_search(arr, 0, len(arr) - 1, 4) == 2
    assert recursion_search(arr, 0, len(arr) - 1, 10) == 3
    assert recursion_search(arr, 0, len(arr) - 1, 40) =
#软件测试##人工智能##测试开发#
全部评论

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务