如何用c语言实现折半查找

简介: 如何用c语言实现折半查找

hello大家好!我依然是你们熟悉的槿凉。那么最近呢由于学校里面的事情比较多,就没有来得及更新博客,不知道小伙伴们有没有想我啦!哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈! 好了,废话不多说,今天我们将来说一说这个折半查找的含义以及具体使用方法。

首先,我们来认识一下什么是折半查找?

定义:折半查找属于二分法里面的一种查找的方法,折半查找又称为二分查找,是一种高效率的查找方法。

要求:折半查找要求所查找的序列是有序的,为了简单,假设该序列是递增的。

思路:设a[low……high]是当前查找区间,首先确定该区间的中间位置mid=(low+high)/2;然后将待查的kz值与a[mid].key相比较。

1>若k==a[mid].key,则查找成功并返回该元素的下标。

2>若k<a[mid],则由表的有序性可知,则该元素必定位于左之表,故新的查找区间是左之表a[low……mid-1]。

3>若k>a[mid],则由表的有序性可知,则该元素必定位于右之表,故新的查找区间是右之表a[mid+1……high]。

下一次查找是针对新的查找区间进行的。

下面看一下完整的代码段:

#include<stdio.h>intBinSearch(inta[],intlow,inthigh,intk)
{
intmid;
if(low<high)//当前区间存在元素时     {
mid=(low+high)/2;//求查找区间的中间位置 if(a[mid]==k)
returnmid;//找到后返回其物理下标 if(a[mid]>k)
returnBinSearch(a,low,mid-1,k);//当a[mid]>k时,在a[low……mid-1]序列中查找 elsereturnBinSearch(a,mid+1,high,k);//当a[mid]<k时在a[mid+1……high]序列中查找     }
elsereturn-1;//当前查找区间没有元素时返回-1  } 
intmain()
 {
intn=10,i;
intk=6;
inta[]={1,2,3,4,5,6,7,8,9,10};
i=BinSearch(a,0,n-1,k);
if(i>=0)
printf("a[%d]=%d\n",i,k);
elseprintf("未找到%d元素\n",k);        
 } 

这里我们查找的元素下标是6,即a[5],下面看一下运行结果:

b1.png

相关文章
|
7月前
|
Java C语言
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
67 0
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-2
第一步: (1). 设置初始数组:int arr[]。 (2). 生成相关变量: int n = 0; -- 存放从键盘输入的要查找的值; int i = 0; -- 循环变量;
102 0
|
C语言
造轮子之-C语言实现ArrayList
造轮子之-C语言实现ArrayList
|
算法 C语言
C语言-折半查找(二分查找)算法详解
C语言-折半查找(二分查找)算法详解
184 0
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-1
思路一:普通方法 (逻辑简单,在无序数组中也可以使用,但效率较低,需要逐个查找) 总体思路:
101 0
|
存储 算法 搜索推荐
【C语言初阶】二分查找(折半查找)
目录 二分查找 1.简介 2.例子 3.代码如下 4.总结
96 0
【C语言初阶】二分查找(折半查找)
|
算法 C语言 索引
09【C语言 & 趣味算法】再识:折半查找(二分查找):基本思想、程序流程图及完整代码、附:顺序查找
09【C语言 & 趣味算法】再识:折半查找(二分查找):基本思想、程序流程图及完整代码、附:顺序查找
09【C语言 & 趣味算法】再识:折半查找(二分查找):基本思想、程序流程图及完整代码、附:顺序查找
|
存储 Linux C语言
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
生产者消费者模式保姆级教程 (阻塞队列解除耦合性) 一文帮你从C语言版本到C++ 版本, 从理论到实现 (一文足以)
|
存储 C语言
c语言实现扫雷(含循环递归展开)
本笔记通过c语言实现扫雷小游戏(包含递归展开) 游戏实现逻辑位于test.c文件,整个游戏头文件位于game.h,游戏进程的具体操作于game.c中实现。
181 0
c语言实现扫雷(含循环递归展开)
|
C语言
c语言实现三子棋(内含阅读思路,简单易实现)
本文如果按顺序来阅读可能不太好接受,建议阅读顺序为,由test.c的逻辑顺序读下去,遇见具体函数的实现跳转到game.c中来理解
150 0
c语言实现三子棋(内含阅读思路,简单易实现)