二维数组——二分法举例

适用情况:在一批有序数据中查找某数

思想:C语言中的二分法和我们数学上学习的二分法是一样的,找到一批数中间的一个数与所查数比较,看是否为你想找的数,如果不是,将找到的数和你需要找的数进行比较,判断在之前还是在之后,从而达到缩小一半范围的效果,之后用同样的方法在每个区域查找,知道你找到需要的数

例题:假设,在数组中的数据是按从小到大的顺序排列的,从键盘上输入一个数,判断该数是否在数组中,如果在的话,则输出所在的序号。

TIPS:

设low,,mid,high这三个变量,分别指示数列中的起始元素,中间元素和最后一个元素,并且赋值,low=0,mid=4,high=9,(C语言中除法小数点后是忽略的),判断mid代表的数是否为所求,如果不是继续查找。然后确定新的区间,继续上面操作,直到找到为止

#define M 10
#include<stdio.h>
int main()
{
	static int a[M] = { -12,0,6,16,23,56,80,100,110,115 };
	int n, low, mid, high, found;
	low = 0;
	high = M - 1;
	found = 0;
	printf("Input a number to be searched:");
	scanf("%d", &n);
	while (low <= high)
	{
		mid = (low + high) / 2;
		if (n == a[mid])
		{
			found = 1;	break;
		}/*找到,结束循环*/
		else if (n > a[mid])
			low = mid + 1;
		else
			high = mid - 1;
	}
	if (found == 1)
		printf("The index of %d is %d", n, mid);
	else
		printf("There is not %d", n);
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟瑟发抖的可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值