标签:没有 ret 最坏情况 end middle 心情 次数 情况 掌握
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循环没办法执行,导致整个代码失去用处。所以在以后的编程中,我们要吸取教训,减少这种低级错误,要更为严谨地进行编程,节约时间也不会影响心情。
标签:没有 ret 最坏情况 end middle 心情 次数 情况 掌握
原文地址:https://www.cnblogs.com/ljtderblogs/p/9786147.html