C语言——二分查找

#include<stdio.h>
//int binary_search(int arr[10], int find)
//{
//	int left = 0;
//	int right = 10 - 1;
//	while (left < right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] > find)
//			right = mid - 1;
//		else if (arr[mid] < find)
//			left = mid + 1;
//		else
//			return mid;
//	}
//	return -1;
//}
int binary_search(int arr[10], int find)
{
	//使用计算查找的次数
	int left = 0;
	int right = 10 - 1;
	int count = 0;
	while (left <= right)
	{
		count++;
		int mid = (left + right) / 2;
		if (arr[mid] > find)
			right = mid - 1;
		else if (arr[mid] < find)
			left = mid + 1;
		else
		{
			printf("count=%d\n", count);
			return mid;
		}
	}
	printf("count=%d\n", count);
	return -1;
}
int main()
{
	//二分查找必须数组中的数据是单项递增或递减
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("请输入要查找的数:>");
	int find;
	scanf("%d", &find);
	//在这里如果不知道数组有多少个数,可以使用sizeof计算并传参传过去,
	//但是不能把数组传过去再计算,因为数组传参传过去的是首元素的地址,
	//计算得到的就是它的类型的字节数
	int ret = binary_search(arr, find);
	if (ret == -1)
		printf("查不到此数\n");
	else
		printf("该数的下标是:%d", ret);
	return 0;
}

二分查找使得查找一个数变得十分简便,二分查找的一个固定规则就是这个数组必须是顺序的,比如说“1,2,3,4,5,6,7,8,9,10”这个数组,要查找‘7’:

left记录最左边的下标,right记录最右边的下标,第一次查找mid=4,找到数字5,比7小,所以就让left=mid+1,表示要查找的那个数可能在mid的右边;第二次查找mid=7,找到数字8,比7大,所以right=mid-1,表示要查找的数可能在mid的左边;以此类推,直到找的了这个数,就返回它的下标,或者找不到,导致left>right,此时就返回-1,表示查不到此数。

count的意思是表示查找的次数

 

如图,就是查找到了7,它的下标是6,查找的次数是4

要注意循环的条件是left<=right,就像我举的例子,在这样的情况中就出现了left==right的情况

接下来我改一下数组的值,改成“1,2,3,4,5,6,7,9,10,11”,在这个数组中查找‘8’

int arr[10] = { 1,2,3,4,5,6,7,9,10,11 };

 

如图所示,查找了四次,但是最终left>right,就返回了-1,最终打印“查不到此数”。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值