C语言折半查找法的超详细讲解
作者:一个爱好编程的大学生i 时间:2022-10-26 19:33:16
折半查找法仅适用于对已有顺序的数组、数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置指到了key那个数那里,所以mid应该处于循环里面,即mid=(high+low)/2。注意:low,mid,high都要与下标绑定,也就是说它们就是下标。且循环条件是:high>=low.
同时注意:⑴若原来数组是由小到大排列的则:
mid=(high+low)/2;
if(key<a[mid])//说明要找的值在左边
high=mid-1;
else if(key>a[mid])//说明要找的值在mid右边
low=mid+1;//最小值的位置往右进一位
㈡若原来数组是由大到小排列的则:
mid=(high+low)/2;
if(key>a[mid])//注意是由大到小排列 ,所以此时key在a【mid】 左边,故high=mid-1 ;
high=mid-1;
else if(key<a[mid])//注意是由大到小排列,所以此时key在a【mid】右边,故low=mid+1;
low=mid+1;
当然在下面这个代码中,也可以用选择排序法和冒泡法来对任意数组进行排序,然后在应用此函数,保证折半查找法的前提是排好序了。
#include<stdio.h>
void zb(int key,int a[],int n)//key表示要找的数,a表示数组,n表示数组元素个数
{
int i,high,low,mid;
int count1=0,count=0;
low=0;
high=n-1;
while(high>=low)//保证右下标不小于左下标
{
count++;
mid=(high+low)/2;//总的来说变得是中间位置相当于把中间位置移到了key那个数那里,所以mid应该处于循环里面
if(key<a[mid])//说明key在a【mid】的左半边 ,那么最右边的high下标就可以在下标mid基础上往左进一个单位了
high=mid-1;
else if(key>a[mid])//说明key在a【mid】的右半边 ,那么最左边的low下标就可以在下标mid基础上往右进一个单位了
low=mid+1;
if(key==a[mid])
{
printf("元素找到了!!!\n一共查找了%d次\n它处于a[%d]位置上\na[%d]=%d\n",count,mid,mid,key);
count1++;
break;
}
}
if(count1==0)
printf("元素不存在!!!\n");
}
int main ()
{
int key,n,a[100];
int i;
void zb(int key,int a[],int n);//声明定义函数
printf("请输入数组元素个数:\n");
scanf("%d",&n);
printf("请输入(从小到大)所有数组元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("请输入要查找的数:\n");
scanf("%d",&key);
zb(key,a,n);
printf("\n");
return 0;
}
来源:https://blog.csdn.net/m0_56168966/article/details/121390236
标签:c语言,折半,查找
0
投稿
猜你喜欢
C# 中的 is 真的是越来越强大越来越语义化(推荐)
2021-06-24 11:55:12
5分钟用C#实现串口助手
2022-01-20 09:43:00
android 网络编程之网络通信几种方式实例分享
2022-01-05 14:23:39
Android ListView UI组件使用说明
2022-06-14 16:04:09
一文带你了解RabbitMQ消息转换器
2023-11-15 23:22:28
C#实现登录窗口(不用隐藏)
2021-11-21 09:30:24
Flutter仿网易实现广告卡片3D翻转效果
2021-07-23 22:38:05
详解Spring Aop实例之AspectJ注解配置
2023-02-04 02:52:53
Java @RequestMapping注解功能使用详解
2022-08-15 11:06:10
java web上传文件和下载文件代码片段分享
2023-10-04 19:50:50
详解Java中final的用法
2022-09-22 10:20:32
安卓Android6.0权限动态获取操作示例
2023-01-26 22:56:43
实现activity管理器一次退出所有activity
2022-11-20 10:15:23
android端使用openCV实现车牌检测
2023-02-26 07:50:50
Java实现常见排序算法的优化
2022-05-20 13:08:37
Jexcel实现按一定规则分割excel文件的方法
2023-06-29 07:52:01
WPF仿LiveCharts实现饼图的绘制
2022-02-08 02:17:05
C# Winform自动更新程序实例详解
2021-12-06 05:52:57
Unity5.6大规模地形资源创建方法
2022-07-12 20:59:55
关于ConditionalOnMissingBean失效问题的追踪
2021-08-19 17:42:04