C语言入门课程之课后习题之折半查找法

2023-12-13 04:01:42

目录

1解题思路:

2代码所示:

3运行代码:

4习题不难,多刷题,练思路,最重要的不是学会了一道题,而是掌握其编程思想;


1解题思路:

折半查找法(half-interval search)

优点:比较次数少,查找速度快,平均性能好

缺点:是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

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

例如:要在数组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;


2代码所示:

#include<stdio.h>
#define n 15
int main()
{
	int arr[n]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},x,i=1,between,left,right,a; 
	printf("输出要查找的数\n");
	scanf("%d",&x);
	left=0;
	right=14;
	while(left<right)//思想:利用数组的角标,不止可以利用数组元素 
	{
		a=(left+right)/2;
		if(arr[a]==x)
		{
			printf("该数是该数组的第%d个元素",a+1);
			break;
		}
		else if(x<arr[a])
		{
			right=a;
		}
		else left=a;
		if(arr[left]==arr[right])
		{
			printf("无此数");
			break; 
		}
	}
	return 0;
}

首先:对数组进行定义并输入要查找的数值;

	int arr[n]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},x,i=1,between,left,right,a; 
	printf("输出要查找的数\n");
	scanf("%d",&x);

然后利用循环和数组的角标进行循环二分查找;

	left=0;
	right=14;
	while(left<right)//思想:利用数组的角标,不止可以利用数组元素 
	{
		a=(left+right)/2;
		if(arr[a]==x)
		{
			printf("该数是该数组的第%d个元素",a+1);
			break;
		}
		else if(x<arr[a])
		{
			right=a;
		}
		else left=a;
		if(arr[left]==arr[right])
		{
			printf("无此数");
			break; 
		}
	}

最后运行即可。

3运行代码:

4习题不难,多刷题,练思路,最重要的不是学会了一道题,而是掌握其编程思想;

但是首先要多刷题

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器。

感谢各位的阅读,以上就是“C语言怎么”的内容了,经过本文的学习后,相信大家对C语言这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是CSDN杰克尼,小编将为大家推送更多相关知识点的文章,欢迎关注!

制作不易,望点个关注,后续我会持续更新c题库,关注我不迷路,有不会的私聊我

请不要相信胜利就像山坡上的蒲公英一样,唾手可得,但是请相信世上总有一些美好,值得我们全力以赴。

若没有习题的,可以看看我的主页,比如说C语言不可不敲系列:跳水比赛排名问题-CSDN博客

这道题就是一个很好的思路;

文章来源:https://blog.csdn.net/mrjieke6/article/details/134886018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。