前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二分查找(非递归、递归)python实现

二分查找(非递归、递归)python实现

作者头像
用户2458545
发布2022-09-07 11:31:00
3770
发布2022-09-07 11:31:00
举报
文章被收录于专栏:阿牛的牙
代码语言:javascript
复制
# -*- coding: utf-8 -*-
"""
@author: sato
@file: binary_search.py
@time: 2019-09-03 15:21

"""


def binary_search(array, key):
    """二分查找非递归"""
    if len(array) <= 1:
        if array[0] != key:
            return
    start = 0
    end = len(array) - 1
    while start <= end:
        mid = (end + start) // 2
        if key < array[mid]:
            end = mid - 1
        elif key > array[mid]:
            start = mid + 1
        else:
            return True


def binary_search(a, b):
    """非递归"""
    min = 0
    max = len(a) - 1
    if b in a:
        while True:
            centre = int((max + min) / 2)
            if a[centre] > b:
                max = centre - 1
            elif a[centre] < b:
                min = centre + 1
            elif a[centre] == b:
                return centre
    else:
        return 'b in not in a'


def binary_search_reduce(array, key):
    """二分查找,递归实现版本"""
    if len(array) == 0:
        return False
    mid = len(array) // 2
    if array[mid] == key:
        return True
    elif key < array[mid]:
        return binary_search_reduce(array[:mid], key)
    else:
        return binary_search_reduce(array[mid + 1:], key)


if __name__ == '__main__':
    # 二分查找的最优时间复杂度为O(1),最坏时间复杂度为O(log n)
    # 递归空间复杂度是:O(N)  非递归: O(1)
    # 使用场景: 在有序数组中寻找指定元素
    sorted_list = [1, 4, 5, 7, 8, 9, 10, 13, 15, 17, 19, 23, 35]
    assert binary_search(sorted_list, 1)
    assert binary_search(sorted_list, 10)
    assert binary_search(sorted_list, 35)
    assert binary_search_reduce(sorted_list, 1)
    assert binary_search_reduce(sorted_list, 13)
    assert binary_search_reduce(sorted_list, 35)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年9月4日 0,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档