文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

用C语言实现二分查找算法

2024-04-02 19:55

关注

一.前言

假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6,7,8,9"这九个数组成的数组来说,假如我们想寻找'2',那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找'7',我们继续用从小到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。

二.二分查找法

1.什么是二分查找法

二分查找法,又叫做折半查找法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。就用刚刚的数组来说,我们想寻找'7',很简单我们先用7和数组中间的数来比较大小,很明显7大于,所以我们缩小范围,从中间的右边开始继续取中间值,继续寻找,直到找到位置,这样一看找的次数少了很多,而且速度也快了不少。

2.如何用c语言来实现二分查找法

咱们来分析一下刚刚我说的找数字7的过程,首先我们需要数组的中间的数也就是中间数的下标值,那我们就需要直到数组第一个元素和最后一个元素的下标值,数组第一个元素下标值很明显是0,我们把他定义成left;这个最后一个元素的下标值我们就需要利用sizeof来计算,我们把他定义成rigth。然后两个相加,算出最中间的下标,我们把他定义为mid,和要找的数进行比较,假如大于要找的数那就从mid+1和right之间来继续刚刚的循环,假如小于要找的数那我们就从left和mid-1之间寻找。就这样一直循环,直到找到目标数为止。

代码的实现如下

void Findnum(int* arr, int key,int sz)//arr为目标数组,key为需要查找的数,sz为数组元素的大小
{//二分查找
	int  left = 0;//左边
	int right = sz-1;//右边
	while (left <= right)
	{
		int mid = (right + left) / 2;
		if (arr[mid] > key)
		{//说明key在arr[mid]和left之间
			right = mid - 1;
		}
		else if (arr[mid] < key)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,对应的下标为:%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到\n");
	}
}

最后运行

三.总结

关于上面的过程,我们不难发现二分查找法虽然很快,但是有两个很明显的缺点,一个是他实现的条件必须是一个有序的数列,另外一个是他只能一次性找一个数而不是多个,这就让他有了很多局限性。二分查找有个很重要的特点,就是不会查找数列的全部元素,而查找的数据量其实正好符合元素的对数,正常情况下每次查找的元素都在一半一半地减少。所以二分查找的时间复杂度为

log2o是毫无疑问的。

总结

到此这篇关于c语言实现二分查找法的文章就介绍到这了,更多相关c语言二分查找法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯