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