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

yizhihongxing

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日

相关文章

  • 详解Spring/Spring boot异步任务编程WebAsyncTask

    详解Spring/Spring Boot异步任务编程WebAsyncTask 异步任务是指不需要等待某个操作完成就能继续执行下一个操作, Spring/Spring Boot提供了一种异步任务处理机制,可以在异步操作完成后返回结果给客户端,这就是WebAsyncTask。 对于Web应用程序而言,异步任务是必不可少的,比如上传文件、处理大数据等操作,会占用大…

    C 2023年5月23日
    00
  • c++编写String类代码实例

    下面是详细讲解”C++编写String类代码实例”的攻略: 1. 什么是String类? String类是C++中封装了的字符串类,它提供了很多操作字符串的方法,如获取字符串长度、复制字符串、连接字符串、比较字符串等等。使用String类可以大大简化字符串操作的过程,提高代码可读性和可维护性。 2. String类的基本实现 2.1 类的定义 class S…

    C 2023年5月24日
    00
  • C++ 动态内存管理详情解说

    C++ 动态内存管理详情解说 在 C++ 程序中,动态内存管理是一项非常重要的任务。动态内存分配和释放可以在运行时动态地完成,使程序具有更大的灵活性。本文将详细解释动态内存管理的概念以及它的使用方法。 什么是动态内存? 动态内存是指程序在运行时动态地分配的内存。每个程序都有一个静态内存,该内存是编译时分配的。静态内存的大小是固定的,而动态内存的大小不是固定的…

    C 2023年5月22日
    00
  • C语言中如何控制程序流程?

    控制程序流程是C语言中非常重要的一个方面,主要通过条件语句、循环语句以及函数调用来实现。下面我将详细讲解。 条件语句 条件语句用于根据条件来执行不同的代码块。C语言中,最常用的条件语句为if…else语句和switch语句。 if…else语句 if…else语句用于在满足特定条件时执行代码块。如果条件为真,则执行if代码块,否则执行else代码…

    C 2023年4月27日
    00
  • C++的静态类型检查详解

    C++的静态类型检查详解 C++是一门静态类型的编程语言,其中的静态类型检查是C++编译器能够在编译期间确定程序中变量类型的能力。这种特性提供了许多优点,例如类型安全和代码可读性,同时也有一些限制。 静态类型检查是什么 静态类型检查是指编译器在编译程序时,通过对程序的语法分析和类型推导,能够确定每个变量的类型和类型之间的关系。根据类型检查结果,编译器可以在编…

    C 2023年5月22日
    00
  • Android NDK开发(C语言基本数据类型)

    Android NDK开发(C语言基本数据类型)攻略 什么是Android NDK? Android NDK(Native Development Kit)是一个允许您使用C和C++代码在Android设备上开发应用程序的工具集。NDK允许您在Android应用程序中使用底层C和C++代码,从而提高应用程序性能。使用NDK可以实现以下功能: 构建基于C/C+…

    C 2023年5月24日
    00
  • C语言常见的指针笔试题解析

    C语言常见的指针笔试题解析 什么是指针 在C语言中,指针是指向内存地址的变量。每个变量在内存中都有一个地址,而指针就是存储这个地址的变量。通过指针可以操作内存地址中的内容。 指针的声明和使用 指针的声明使用*来标记,例如: int *p; 这个声明语句表示一个指向整型变量的指针p。如果要让指针p指向某个变量的地址,可以使用&运算符: int a = …

    C 2023年5月23日
    00
  • c语言中getch,getche,getchar的区别

    当你在使用 C 语言编写控制台程序时,可能会使用到三个常用的函数:getch、getche和getchar。它们都可以用于从控制台读取用户输入的字符,但是它们的行为有些不同。 1. getch getch函数通常被用于读取单个字符,但是它是一个非标准的函数,不是ANSI C标准的一部分。因此,它的行为可能因操作系统/编译器而异。简单来说,它可以从键盘上读取一…

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