算法第二章上机实践报告

1.实践题目:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

2.问题描述:通过二分搜索技术,找出数组中与x数值相等的数字,然后输出该数字在数组中的下标,若当left大于right的时候,则代表数组中不存在x数字,输出-1与比较次数。

3.算法描述:

int BIN(int a[], int key, int n) {
int left = 0;
int right = n - 1;
int t = 0;
while (left <= right) {
int middle = (left + right) / 2;
t++;
if (key == a[middle])
{
cout << middle<<endl;
cout << t;
return middle;
}
if (key > a[middle])left = middle + 1;
else { right = middle - 1; }

}
cout << "-1"<< endl;
cout << t ;
return -1;
}

4.时间复杂度:O(logn)因为最坏情况下while循环执行了logn次 ,空间复杂度o(1)只有一次循环。

5.心得体会:二分搜索算法很方便,而且难度较小,能够较好理解并且掌握,但在编程过程中,我和组员吴梓轩同学讨论写出代码后,一直不能实现正确结果,而我们的编程逻辑在思考讨论后,也认为是没有问题的,编译也能通过,最后在问了老师才知道,我们在while循环后面不小心打了一个分号,导致整个while循环没办法执行,导致整个代码失去用处。所以在以后的编程中,我们要吸取教训,减少这种低级错误,要更为严谨地进行编程,节约时间也不会影响心情。

posted on 2018-10-14 13:41  李鉴涛  阅读(93)  评论(0编辑  收藏  举报

导航