文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python二分查找算法怎么应用

2023-07-02 14:02

关注

本篇内容主要讲解“Python二分查找算法怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二分查找算法怎么应用”吧!

Python二分查找算法怎么应用

1. 算法描述

二分法是一种效率比较高的搜索方法

回忆之前做过的猜数字的小游戏,预先给定一个小于100的正整数x,让你猜猜测过程中给予大小判断的提示,问你怎样快速地猜出来?

我们之前做的游戏给定的是10次机会,如果我们学会.二分查找法以后,不管数字是多少,最多只需要7次就能猜到数字。

Python二分查找算法怎么应用

2. 算法分析

必须是有序的序列。

2、对数据量大小有要求。

数据量太小不适合二分查找,与直接遍历相比效率提升不明显。

数据量太大也不适合用二分查找,因为数组需要连续的存储空间,若数据量太大,往往找不到存储如此大规模数据的连续内存空间。.

3. 算法思路

假设有一个有序列表如下:

Python二分查找算法怎么应用

请问数字11是否在此列表中,如果在它的索引值为多少?
Python二分查找算法怎么应用

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))        breakelse:    print("数字%s 没有找到" % seek_number)print("一共用了:%s次查找" % count)

运行结果:

Python二分查找算法怎么应用

递归法实现

在循环中定义了一个变量count,如果第一次循环后count没有变化,就说明输入的是有序序列,这时我们直接return退出循环,这时候的时间复杂度为O(n)

实现代码:

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) - 1print("查找的数字:%s,索引为:%s" % (seek_number, binary_search(seek_number, left, right)))

运行结果:

Python二分查找算法怎么应用

到此,相信大家对“Python二分查找算法怎么应用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯