iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++与python实现二分查找的原理及实现
  • 142
分享到

c++与python实现二分查找的原理及实现

2024-04-02 19:04:59 142人浏览 独家记忆
摘要

目录1、时间复杂度与优缺点2、python实现3、c++实现在计算机中,数据的查找方式与其存储方式关系密切。试想一下,如果图书馆中书籍杂乱无章的存放,那么要想找到心仪的书籍将会非常困

在计算机中,数据的查找方式与其存储方式关系密切。试想一下,如果图书馆中书籍杂乱无章的存放,那么要想找到心仪的书籍将会非常困难。为此,人们常常将物品按照某种规则或次序进行放置,目的是便于日后的查找。

作为查找算法家族中的一员,二分查找正是利用数据按次序存储这一优点,极大的提升了查找目标值所在位置的速度。

二分查找的核心思想是:首先将数组中间值和目标值进行比较,如果相等则返回;如果不相等,则选择中间值左边的一半或者右边的一半进行比较;不断重复直到检索完毕。首先来看下面这个gif,其中蓝色圈表示左位置,粉色圈表示右位置,绿色圈表示中间位置:

首先定义的是左边界(蓝色圈)和右边界(粉色圈),进而根据左边界和右边界计算出中间位置(绿色圈);然后,比较中间位置的值和目标值的大小,比较结果包含3种情况

  • 如果相等则表示查找成功,返回中间位置;
  • 如果中间位置的值小于目标值,则说明目标值在中间位置到右边界这一半;
  • 如果中间位置的值大于目标值,则说明目标值在左边界到中间位置这一半;

上述步骤的循环需要终止条件,即左边界小于或等于右边界,表明此时已经搜索完成,目标数值不在数据中存在。

1、时间复杂度与优缺点

既然每次搜索后区间长度都减半,假设数据个数(即区间长度)为n,那么算法每次迭代得到的区间长度依次为n/2,n/4,n/8等等,其通项如下,k表示循环次数:

最坏的情况,就是搜索到区间长度为1,即最后只剩1个元素:

 

所以,可以求得最坏情况下需要运行的次数为:

因此二分查找复杂度为O(logn),相比于顺序查找其速度获得了极大的提高(优点)。但是,必须注意二分查找需要保证数据是有序的,这就要求数据必须预先进行排序(缺点)。

2、Python实现

def binary_search(ordered_list, target_value):
    """
    Args:
        ordered_list: data with order
        target_value: value that want be searched
    """
    left = 0
    right = len(ordered_list)-1
    # 终止条件
    while left <= right:
        # 中间位置计算
        mid = int((left+right)/2)
        if ordered_list[mid] == target_value:
            return "index is {}, target value is {}".fORMat(mid, ordered_list[mid])
        # 此时目标值在中间值右边,更新左位置
        elif ordered_list[mid] < target_value:
            left = mid + 1
        # 此时目标值在中间值左边,更新右位置
        elif ordered_list[mid] > target_value:
            right = mid - 1
    # 搜索结束没有找到
    return "Not find"

3、C++实现

int binarySearch(int *orderedData, int dataLength, int targetValue) {
    int left = 0;
    int right = dataLength - 1;
    int mid;
    // 终止条件
    while (left<=right)
    {
        // 中间位置计算
        mid = (left + right) / 2;
        if (*(orderedData + mid) == targetValue) {
            return mid;
        }
        // 目标值在中间值右边,更新左位置
        else if (*(orderedData + mid) < targetValue){
            left = mid + 1;
        }
        // 目标值在中间值左边,更新右位置
        else
        {
            right = mid - 1;
        }
    }
    // 搜索不到,返回-1
    return -1;
}

到此这篇关于c++与python实现二分查找的原理及实现的文章就介绍到这了,更多相关c++与python实现二分查找内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c++与python实现二分查找的原理及实现

本文链接: https://www.lsjlt.com/news/142129.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++与python实现二分查找的原理及实现
    目录1、时间复杂度与优缺点2、python实现3、C++实现在计算机中,数据的查找方式与其存储方式关系密切。试想一下,如果图书馆中书籍杂乱无章的存放,那么要想找到心仪的书籍将会非常困...
    99+
    2022-11-13
  • Python实现二分查找与bisect模块详解
    前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n) 。对于大数据量,则可以用二分查找进行优化。 ...
    99+
    2022-06-04
    详解 模块 Python
  • Python语言实现二分法查找
    前言: 二分法也就是二分查找,它是一种效率较高的查找方法 假如公司新来了一个人,叫张三,他是你们公司第47个人,过了一段时间后,有些人呢看张三不爽,离职了,那这时候张三肯定不是公司第...
    99+
    2022-11-13
  • 用C语言实现二分查找算法
    目录一.前言二.二分查找法1.什么是二分查找法2.如何用c语言来实现二分查找法三.总结总结一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,...
    99+
    2022-11-12
  • Python实现二分法查找及优化的示例详解
    目录1.二分查找的原理2.二分查找的实现3.二分查找的优化4.总结二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的算法,它的思想是将数组从中间分成两部分,...
    99+
    2023-05-16
    Python实现二分法查找 Python二分法查找 Python查找
  • 关于二分法查找Java的实现及解析
    目录二分法查找概述递归实现递归实现代码循环实现代码(非递归)二分法查找(递归、循环)二分法查找 概述 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。...
    99+
    2022-11-13
  • 使用Python实现二分法查找的示例
    关于二分法的定义我就不说了,CSDN很多大牛和前辈都已经阐述的很清楚了,直接上代码。 首先,先创建一个名称为 binary_search 的函数:传递两个参数,元素列表和要查找的值。...
    99+
    2023-05-17
    Python 二分法 Python二分查找
  • C#实现简单的二叉查找树
    二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右...
    99+
    2022-11-13
  • 快速查找与二分查找算法如何在Java中实现
    这期内容当中小编将会给大家带来有关快速查找与二分查找算法如何在Java中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 快速查找:这个是相当简单的,以数组举例,就用一个for循环去查找数组中需要查...
    99+
    2023-05-31
    java 快速查找 二分查找
  • Java实现二分查找树及其相关操作
    二分查找树(Binary Search Tree)的基本操作有搜索、求最大值、求最小值、求前驱、求后继、插入及删除。 对二分查找树的进行基本操作所花费的时间与树的高度成比例。例如有n...
    99+
    2022-11-12
  • python二分查找算法的递归实现方法
    本文实例讲述了python二分查找算法的递归实现方法。分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = ...
    99+
    2022-06-04
    递归 算法 方法
  • C/C++并查集的查询与合并实现原理
    目录一、并查集的概念二、并查集的实现1.并查集不同集合(树)的形成2.find()函数找一个元素集合的编号3.合并两个不同集合(合并两棵不同的树)4.查询两个元素是否在一个集合5.并...
    99+
    2023-02-13
    C++并查集的查询与合并 C语言并查集的合并与查询
  • C++多态的实现与原理及抽象类实例分析
    这篇文章主要讲解了“C++多态的实现与原理及抽象类实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多态的实现与原理及抽象类实例分析”吧!多态的概念多态: 从字面意思来看,就是事物...
    99+
    2023-06-29
  • C语言巧用二分查找实现猜数游戏
    目录(壹)二分查找  1.1  何为二分查找  1.2  二分查找的原理  1.3  查找条件  1.4&nbs...
    99+
    2022-11-13
  • Python算法练习之二分查找算法的实现
    目录1. 算法描述2. 算法分析3. 算法思路4. 代码实现纯算法实现递归法实现1. 算法描述 二分法是一种效率比较高的搜索方法 回忆之前做过的猜数字的小游戏,预先给定一个小于100...
    99+
    2022-11-11
  • 如何使用Python语言实现二分法查找
    这篇文章主要为大家展示了“如何使用Python语言实现二分法查找”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Python语言实现二分法查找”这篇文章吧。前言:二分法也就是二分查找,它是...
    99+
    2023-06-29
  • C#如何实现简单的二叉查找树
    本篇内容介绍了“C#如何实现简单的二叉查找树”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!二叉查找树(Binary Search Tree)...
    99+
    2023-07-02
  • 两种java实现二分查找的方式
    目录1、二分查找算法思想2、二分查找图示说明3、二分查找优缺点3、java代码实现3.1 使用递归实现 3.1 不使用递归实现(while循环) 3.3 测试4、时间复杂度5、空间复...
    99+
    2022-11-12
  • Java怎么实现二分查找的变种
    小编给大家分享一下Java怎么实现二分查找的变种,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于...
    99+
    2023-05-30
    java 二分查找
  • C语言通过二分查找实现猜数字游戏
    目录二分查找二分查找的思想二分查找的条件二分查找的实现过程代码举例猜数字游戏游戏说明猜数字游戏思想代码实现整体代码演示二分查找 题目: 在一个有序数组中查找具体的某个数字n。 首先我...
    99+
    2023-02-03
    C语言 二分查找实现猜数字 C语言 二分查找 C语言 猜数字
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作