C语言实现 用折半查找法寻找数组中的数

C语言实现 用折半查找法寻找数组中的数,第1张

文章目录
  • 一、注意
  • 二、答案
    • 1.源代码
    • 2.代码讲解
      • 1.预定义difine N 15的作用
      • 2.第一个for循环的作用
      • 3.第二个for循环(包括其内部循环)的作用
      • 4.第三个for循环的作用
      • 5.scanf("%d", &n)的作用
      • 5.do...while&&最后一个if的作用
  • 总结


一、注意

提示: 读者可根据需求修该#difine N 15的值以达到重新定义数组的长度
如果读者使用的是Visual Studio的话第一行要加上如下代码否则使用scanf函数时会报错。

二、答案

运行结果

1.源代码
#define _CRT_SECURE_NO_WARNINGS 1
#define N 15
#include
int main()
{	
	int a[N], e, f, g, b, c, d, h, i, j = 0, k, n;
	   b = 0; c = N - 1; d = 2;	
	printf("请输入数组a[%d]里面的%d个数:",N,N);
	for (e = 0; e <= N-1;e++) {	
			scanf("%d,", &a[e]);	
	}
	for (e = 0; e <= N - 2;e++) {
		for (f = e + 1; f <= N - 1; f++) {
			if (a[e] < a[f]) {
				g = a[e]; a[e] = a[f]; a[f] = g;	}
		}
	}
	for (e = 0; e <= N - 1; e++) {
		if (e == 0) { printf("该数组从大到小排列后a[%d]={",N); }
		if (e<=N-2) { printf("%d,", a[e]); }
		else 
			printf("%d}\n", a[e]);		
	} 
	printf("输入您要寻找的数:");
	scanf("%d", &n);
	do {
		h = (b + c) / 2;
		if (a[h] == n) {
			d = 1;
			for (i = 0; i < N; i++) {
				if (a[i] == n) {
					
					if (j < 1) {
						printf("找到%d,对应的数组为:", n);
					}
					else
						;
					 printf("a[%d] ", i); 
					 j++;
				}				
			}
			break;
		}
		else if (a[h] < n) {
			c = h - 1;
		}
		else
			b = h + 1;	
	} while (c>=b);
	if (d == 2) {
		printf("不能找到%d",n);
	}
	return 0;
}
2.代码讲解 1.预定义difine N 15的作用
#define N 15

为了定义数组的长度,该代码表示该数组有15个元素,读者可以根据自身需求进行更改。

2.第一个for循环的作用

将数依次储存在a[N]中。

3.第二个for循环(包括其内部循环)的作用

将数组a[N]中的数进行降序排列。
如果需要进行升序排列的话,只需要将第二个for循环改为如下即可。

for (e = 0; e <= N - 2;e++) {
		for (f = e + 1; f <= N - 1; f++) {
			if (a[e] > a[f]) {
				g = a[e]; a[e] = a[f]; a[f] = g;	}
		}
	}

4.第三个for循环的作用

将排序后的数组进行输出

5.scanf(“%d”, &n)的作用

输入你准备查找的数字

5.do…while&&最后一个if的作用

查找并判断你输入的值是否存在,do…while…里面的第一个if判断存在的情况,循环体外的if用以判断不存在的情况。

	do {
		h = (b + c) / 2;
		if (a[h] == n) {
			d = 1;
			for (i = 0; i < N; i++) {
				if (a[i] == n) {
					
					if (j < 1) {
						printf("找到%d,对应的数组为:", n);
					}
					else
						;
					 printf("a[%d] ", i); 
					 j++;
				}				
			}
			break;
		}
		else if (a[h] < n) {
			c = h - 1;
		}
		else
			b = h + 1;	
	} while (c>=b);
	if (d == 2) {
		printf("不能找到%d",n);
	}

总结

该代码在寻找你输入的数时用到了折中的思想,这么做提高了代码运行的效率,读者只要能够理解do…while…的意思基本上这个程序的精髓就得以掌握。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/713688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存