0
点赞
收藏
分享

微信扫一扫

Python每日一练——第8天:二分查找算法

前言📢📢

Python每日一练来啦,本文已收录于:《Python每日一练》专栏

此专栏目的在于,帮忙学习Python的小白提高编程能力,训练逻辑思维,每周持续更新中,欢迎免费订阅!!!


文章目录


1. 算法描述

2. 算法分析

3. 算法思路

4. 代码实现

纯算法实现

实现代码📝:

arr_list = [5, 7, 11, 22, 27, 33, 39, 52, 58]
# 需要查找的数字
seek_number = 11
# 保存一共查找了几次
count = 0
# 列表左侧索引
left = 0
# 列表右侧索引
right = len(arr_list) - 1
# 当左侧索引小于等于右侧索引时
while left <= right:
    # 取中间的索引位置
    middle = (left + right) // 2
    # 查找次数进行累加
    count += 1
    # 如果查找的数字大于中间位置的数字时
    if seek_number > arr_list[middle]:
        # 左侧索引为中间位置索引+1
        left = middle + 1
    # 如果查找的数字小于中间位置的数字时
    elif seek_number < arr_list[middle]:
        # 右侧索引为中间位置索引-1
        right = middle - 1
    # 如果等于中间索引数据
    else:
        print('数字:%s找到了,索引值为:%s' % (seek_number, middle))
        break
else:
    print("数字%s 没有找到" % seek_number)
print("一共用了:%s次查找" % count)

运行结果👇:

在这里插入图片描述

递归法实现

实现代码📝:

arr_list = [5, 7, 11, 22, 27, 33, 39, 52, 58]


def binary_search(seek_number, left, right):
    if left <= right:
        middle = (left + right) // 2
        if seek_number < arr_list[middle]:
            right = middle - 1
        elif seek_number > arr_list[middle]:
            left = middle + 1
        else:
            return middle
        # 进行递归调用
        return binary_search(seek_number, left, right)
    # 当左侧索引大于右侧索引时,说明没有找到
    else:
        return -1


# 查找的数字
seek_number = 11
# 列表左侧索引
left = 0
# 列表右侧索引
right = len(arr_list) - 1
print("查找的数字:%s,索引为:%s" % (seek_number, binary_search(seek_number, left, right)))

运行结果👇:

在这里插入图片描述

5. 如何让刷题变得更加高效呢?

举报

相关推荐

0 条评论