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,最终打印“查不到此数”。 

内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值