C语言实现折半查找法(二分法)

C语言实现折半查找法(二分法)

简介

折半查找法,也称二分法,是一种高效的查找算法。它适用于有序数组,具体实现方法是先确定中间位置元素,然后与查找元素进行比较,根据比较结果选择剩余部分继续查找,直到找到或未找到。

实现步骤

以下是实现折半查找法的具体步骤:

  1. 将查找范围的下标low和up分别设为数组下标的最小值和最大值,即low=0,up=n-1,其中n为数组元素个数。
  2. 计算mid,即中间位置的下标,即mid=(low+up)/2。
  3. 用待查找元素与中间位置元素进行比较,如果两者相等,返回mid;如果待查找元素小于中间位置元素,则继续在前一半查找,即将up设为mid-1;如果待查找元素大于中间位置元素,则继续在后一半查找,即将low设为mid+1。
  4. 重复执行步骤2和步骤3,直到找到待查找元素或者查找范围为空,此时返回-1表示未找到。

示例说明

以下是两个示例说明:

示例1

给定有序数组a={1,2,3,4,5},要查找元素key=4。

按照上述步骤进行折半查找:

  1. low=0,up=4,mid=2,a[mid]=3,key>a[mid],所以在后一半查找。
  2. low=3,up=4,mid=3,a[mid]=4,key=a[mid],找到了,返回mid=3。

因此,4在数组a中的下标为3。

示例2

给定有序数组a={1,2,3,4,5},要查找元素key=6。

按照上述步骤进行折半查找:

  1. low=0,up=4,mid=2,a[mid]=3,key>a[mid],所以在后一半查找。
  2. low=3,up=4,mid=3,a[mid]=4,key<a[mid],所以在前一半查找。
  3. low=3,up=2,查找范围为空,返回-1表示未找到。

因此,6不在数组a中,返回-1表示未找到。

代码实现

int binarySearch(int a[], int n, int key) {
    int low = 0, up = n - 1, mid;
    while (low <= up) {
        mid = (low + up) / 2;
        if (key == a[mid]) {
            return mid;
        } else if (key < a[mid]) {
            up = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    return -1;
}

其中,参数a为有序数组,n为数组元素个数,key为待查找元素。函数返回找到的元素下标,或者-1表示未找到。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现折半查找法(二分法) - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • C++实现寝室卫生管理系统

    C++实现寝室卫生管理系统 1. 系统需求分析 在实现寝室卫生管理系统时,我们需要明确系统的需求和功能。一个基本的寝室卫生管理系统应该包括以下功能: 管理员登录:管理员需要进行身份验证,才能进行管理操作; 学生信息录入:管理员可以添加、修改、删除学生信息; 寝室卫生评分:管理员需要对寝室进行卫生评分,并记录下评分结果; 查询寝室卫生:学生可以通过系统查询自己…

    C 2023年5月23日
    00
  • C++ 轻量级对象JSON序列化实现详情

    C++ 轻量级对象JSON序列化实现详情 为什么需要JSON序列化 在程序开发过程中,我们通常需要将内存中的数据序列化并存储到文件或者网络中进行传输。JSON作为一种轻量级的数据交换格式,因其具有易读性、易存储、易解析等优点,被广泛应用于前后端数据交互、移动设备数据传输等领域。C++社区相关的JSON库也有很多,但有些过于庞大,并不适用于轻量级数据的处理。因…

    C 2023年5月22日
    00
  • C语言实现点菜系统

    C语言实现点菜系统 本攻略将介绍如何使用C语言实现一个简单的点菜系统。在这个系统中,顾客可以浏览菜单,选择自己的菜品并计算价格。系统则会输出选择的菜品及总价。 基本思路 定义菜单。菜单的定义可以采用数组的方式实现,每个元素代表一道菜品,包括名称和价格。 展示菜单。通过循环遍历数组,输出所有菜品名称及价格。 用户选择菜品。通过让用户输入菜品的编号,实现选择菜品…

    C 2023年5月23日
    00
  • C++ 基类指针和子类指针相互赋值的实现方法

    要实现基类指针和子类指针相互赋值,需要使用向上转型和向下转型实现。 向上转型是将子类的指针转换为基类的指针,可以使用static_cast操作符或者在函数中使用传递引用或指针的方式进行转型,其格式如下所示: 基类指针名 = static_cast<基类*>(子类指针名); 或者 void 函数名(基类& 或指针名,子类& 或指针名…

    C 2023年5月23日
    00
  • Windows上安装Apache2、PHP5、MySQL5及与Resin配合实现多系统之整合

    Windows上安装Apache2、PHP5、MySQL5及与Resin配合实现多系统之整合攻略 在Windows上安装Apache、PHP、MySQL以及与Resin进行整合,可以实现多系统之间的协同工作。本攻略将会提供详细的步骤说明,供需要的用户参考。 安装Apache2 下载Apache:官网链接 选择对应的版本下载(建议下载Windows平台下的.m…

    C 2023年5月24日
    00
  • 刺客信条奥德赛最全修改词条 船只武器修改词条分享

    刺客信条奥德赛是一款人气极高的动作角色扮演游戏,在游戏中玩家可以自由探索开放世界,完成各种任务和挑战。如果玩家想要进一步享受游戏的乐趣,可以通过修改游戏词条来改变游戏体验,下面就来详细讲解“刺客信条奥德赛最全修改词条 船只武器修改词条分享”的完整攻略。 1. 进入游戏词条修改器 在开始之前,需要安装一个名为“Cheat Engine”的修改器软件。安装好后,…

    C 2023年5月22日
    00
  • C语言 表、栈和队列详解及实例代码

    C语言 表、栈和队列详解及实例代码 什么是表、栈和队列 表 表是一种动态的数据结构,它的每个元素都包含一个指向下一个元素的指针。表常用于构建链表,提供了动态插入和删除元素的能力。 栈 栈是一种先进后出的数据结构,它具有压入和弹出操作,插入和删除元素均在栈顶执行。栈在编程中可用于实现函数的调用、表达式求值等。 队列 队列是一种先进先出的数据结构,它具有入队和出…

    C 2023年5月24日
    00
  • C语言栈帧的组织

    C语言中函数调用的过程中,每个函数调用都会创建一个栈帧,栈帧用来存储函数的参数、局部变量和一些执行状态。C语言栈帧的组织是指在函数调用的过程中,如何使用堆栈的方式来组织栈帧。下面是C语言栈帧的组织的详细使用攻略: 1. 栈帧的组成 C语言函数调用产生的栈帧通常由以下几个部分组成: 函数参数 返回地址 前一个函数的栈帧指针 局部变量 临时寄存器 其中,函数参数…

    C 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部