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

 更新时间:2020年11月01日 12:27:01   作者:_MaL  
这篇文章主要为大家详细介绍了C语言实现折半查找法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

折半查找法也叫做二分查找,顾名思义,就是把数据分成两半,再判断所查找的key在哪一半中,再重复上述步骤知道找到目标key;

注意:折半查找法仅适用于对已有顺序的数组、数据进行操作!!!

很显然,折半查找法相对于其他查找方法例如顺序查找法效率要高很多;

下面我们来实际操作一下,了解二分查找的奥义。

例如:要在数组arr[]={8,7,9,6,4,1,2,5,3,10,11};中查找key=7的位置;首先,我们要先将数组arr中的数据成员进行排序。arr[]={1,2,3,4,5,6,7,8,9,10,11};

如图所示:将该组数据小端记作low,大端记作high,中间值记作mid;
二分法查找时,将所查找的key与mid比较,例如key=7,即可缩小查找范围在mid和high之间;

如图所示即可找到key=low=7;

注意: (敲黑板)如果中间数mid不是整数,需要进行取整。

代码如下:

#include<stdio.h>
int BinSearch(int arr[],int len,int key)             //折半查找法(二分法)
{
 int low=0;             //定义初始最小
 int high=len-1;         //定义初始最大
 int mid;              //定义中间值
 while(low<=high)
 {
 mid=(low+high)/2;       //找中间值
 if(key==arr[mid])        //判断min与key是否2020111122411718相等
  return mid;  
 else if(key>arr[mid])       //如果key>mid 则新区间为[mid+1,high]
  low=mid+1;
 else                    //如果key<mid 则新区间为[low,mid-1]
  high=mid-1;
 }
 return -1;               //如果数组中无目标值key,则返回 -1 ;
}
int main()
{
 int arr[]={1,2,3,4,5,6,7,8,9,10,11};           //首先要对数组arr进行排序
 printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7));
 return 0;
}

运行结果如下:

希望对您有所帮助!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++中内存分区及其作用分析

    C++中内存分区及其作用分析

    C++内存分区包括栈区、堆区、全局静态区、常量区,各自负责不同的数据存储和回收,栈区主要用于存放函数局部变量和参数,堆区用于动态分配内存,全局静态区用于存放全局静态变量和静态成员变量,常量区用于存放常量和字符串常量
    2023-04-04
  • C语言工程文件该如何写(以三子棋游戏为例)

    C语言工程文件该如何写(以三子棋游戏为例)

    工程上写代码应分为多个文件,那么你知道C语言工程文件该如何写吗,本文就以以三子棋游戏为例,介绍一下,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++中求余运算符(%)示例详解

    C++中求余运算符(%)示例详解

    求余运算符“%”,二元运算符,具有左结合性。参与运算的量均为整型。求余运算的结果等于两个数相除后的余数。看似很简单的运算符,却也真要掌握用好它也不容易,这篇文章主要介绍了C++中求余运算符(%)的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • C语言UDP传输系统源码

    C语言UDP传输系统源码

    这篇文章主要为大家分享了C语言UDP传输系统的源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 详解MFC/C++调用易语言的整数型和文本型与VS2010互动

    详解MFC/C++调用易语言的整数型和文本型与VS2010互动

    在本篇文章里我们给大家分享了MFC/C++调用易语言的整数型和文本型与VS2010互动相关知识点内容,有兴趣的朋友们可以参考下。
    2018-11-11
  • C语言实现简单推箱子游戏

    C语言实现简单推箱子游戏

    这篇文章主要为大家详细介绍了C语言实现简单推箱子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++利用链表写一个简单的栈实例详解

    C++利用链表写一个简单的栈实例详解

    这篇文章主要介绍了C++利用链表写一个简单的栈实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++双向链表的增删查改操作方法讲解

    C++双向链表的增删查改操作方法讲解

    相较单链表,双向链表除了data与next域,还多了一个pre域用于表示每个节点的前一个元素。这样做给双向链表带来了很多优势。本文主要介绍了双向链表的实现,需要的可以参考一下
    2023-03-03
  • 一文详解C语言中的switch语句和while循环

    一文详解C语言中的switch语句和while循环

    这篇文章主要给大家详细介绍了C语言中的switch语句和while循环,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • C语言数据结构创建及遍历十字链表

    C语言数据结构创建及遍历十字链表

    这篇文章主要介绍了C语言数据结构十字链表的创建及遍历,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-10-10

最新评论