由二分算法引发的一些感悟

后天期末考试,今天复习了一下二分查找,这个真的是高中学到精的不能再精的一个算法了,真的是太经典了,看到这个我真的想到了曾经高二暑假的那个往死里刷VB刷题宝典的愣头青…那个时候的我真的是刷出味道来了,就真的是全身心的投入,就是那种越做越爽的感觉,到了大学,难度拔的太快,一开始不是很适应。也焦虑过很长一段时间吧,但所幸都坚持下来了,都能挺过来。。。高中的时候自命不凡,总是以为给我时间可以学好所有我想要掌握的知识,到了大学之后,才发现自己的想法是多么幼稚。。大学里面难的知识太多了,就算一门很简单的课程你若是深入下去也会感受到四面楚歌的感觉,但那又怎么样呢,这何尝对我们不是一种挑战?尽管在没有任何基础的前提下提前接触了算法里面比较难的部分,让我怀疑人生怀疑了很长一段时间,但是现在回头看看,这带给我最多的,就是对算法的敬畏,之前愣头青的我只会暴力解法,在接触到了一些算法之后,才知道真正的程序员是需要不断优化,不断“取巧”的,这个思想是我这个学期在C语言这门课上最大的一个收获,还是那句,“没有最好的算法,只有更好的算法”。

好了,扯远了,果然我还是一个感性的人,看到一些熟悉的东西就控住不住自己笔头。。

下面给出二分查找的核心代码

#include
using namespace std;
int main()
{
     
	int a[1000];
	int n;
	while(cin>>n)
	{
     
	for(int i=1;i<=n;i++) cin>>a[i];
	int begin=1,end=n;
	int x;
	cin>>x;
	int judge=0;
	while(begin<=end)
	{
     
		if(a[(begin+end)/2]==x)
		{
     
			judge=1;
			break;
		}
		if(a[(begin+end)/2]>x)
		{
     
			end=(begin+end)/2-1;
		}
		else
		{
     
			begin=(begin+end)/2+1;
		}
	}
	if(judge) cout<<(begin+end)/2<<endl;
	else cout<<"不好意思,找不到该数据"<<endl;
	}
}

那时候在高中理解的比较困难,现在学习能力上去了,再回头看真的很简单。具体的我就不解释了,网上已经讲得很清楚了。

你可能感兴趣的:(感悟,算法,算法)