C语言经典算法之二分查找

123 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情


前言

—————————————————————————————————————————— 首先先摘抄上几句话:献给坚持创作的我和点开这篇文章希望进步的你

1.碰到一点压力就把自己变成不堪重负的样子, 碰到一点不确定性就把前途描摹成暗淡无光, 碰到一点不开心就把它搞得似乎是这辈子最黑暗的时候, 大概都只是因为不想努力而放弃找的最拙劣的借口 没什么值得畏惧,你唯一需要担心的是, 你配不上自己的野心, 也辜负了曾经历的苦难。
2.这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。 什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康°流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。” —于宙.《我们这一代人的困惑》
3.大部分人在二三十岁上就死去了,因为过了这个年龄,他们只是自己的影子,此后的余生则是在模仿自己中度过。日复一日,更机械,更装腔作势地重复他们在有生之年的所作所为,所思所想,所爱所恨。 ——罗曼·罗兰《约翰·克利斯朵夫一》

今天这篇文章我们来讲述一下C语言的中重要的一个知识点:二分查找,虽然它并不是很难,但是它对于学习C语言和数据结构与算法是十分重要的。

运行代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(vodi)
{
	//二分查找:
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]);
	int x = 0;
	scanf("%d", &x);
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > x)
			right = mid - 1;
		else if (arr[mid] < x)
			left = mid + 1;
		else
		{
			printf("Find!,the subscript is %d", mid);
			break;
		}
	}
	if (left > right)
		printf("NO Find!\n");
	return 0;
}

运行结果截图

在这里插入图片描述

注意:

当(left+right)/2大于Int的取值范围时,则会导致数据溢出,故这种写法并不是完美的, 可以将int mid = (left + right) / 2;改为:int mid=left+(right-left)/2;这样就可以完美的解决bug了!!! 在这里插入图片描述 画一个这个图,希望帮助大家理解!

最后

十分感谢你可以耐着性子把它读完和我可以坚持写到这里,摘抄几句话,对你,也对我:

1.我年纪越大,就越觉得那些心理阴暗,一肚子心计,满脑子阴谋论的人,是因为智力不够。这和我小时候的认识是大致相反的。尽管存在个体差异,但是整体上,足够聪明的,进化得更好的人群,通常会倾向于选择公平、正义,更容易具有坦诚、善良的品质。
2.我不相信掌纹能够带给我什么,我只相信十指握成拳头的力量,它能带我创造一个全新的世界。 —毕淑敏
3.若干年后,你也经历了一些人世,也有了一些只能在失眠的夜里独自咀嚼的故事,你青涩褪尽,渐渐懂了生之可忧,死之可怖。你终于也明白并且心平气和的接受了他不过是个平凡的人,与其他甲乙丙丁并没有什么本质的不同。可是,讲不清楚为什么,你还是有所眷恋,像是一种迷信,庙宇塌毁了,神还是神。
4.和人世间那些热气腾腾的朋友在一起吧。是她们大吃大喝大嚼大笑,拉拉扯扯打打闹闹,奋力把你从不敢求助的孤独里拽出来,推推操操若无其事地,拥着你往前走去。她们让你在日常的冷寂里感觉到年节的暖,你不敢说谢谢,但你知道人生花团锦簇,某一刻终于和自己有关。 》
5.很多时候不是我们去看父母的背影,而是承受他们追逐的目光,承受他们不舍的,不放心的,满眼的目送。最后才渐渐明白,这个世界上,再也没有任何人,可以像父母一样,爱我如生命。 ——龙应台Q

最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)

愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!