1.实践题目
二分查找
2.问题描述
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数
3.算法描述
代码的核心部分:
while(left <= right){ mid = (left + right) / 2; cnt++; if(a[mid] == x) break; else if(a[mid] < x){ left = mid + 1; } else right = mid - 1; }
二分查找的理解即为:取一段数列的中点,如果中点恰好为该数字则退出;
若中点比查找的数x小,则在数列的右端查找(left = mid + 1),否则在数列的左端查找;
不断重复,直到查找到x,若不存在,则返回-1及比较次数。
4.算法时间及空间复杂度分析
二分查找也可称为折半查找,即不断取n个元素数组的中点,剩余元素从n/2到n/2^k不断减少;
到最后查找到的情况下,n/2^k=1,即可得k=logn,时间度复杂度为O(logn);
至于空间复杂度的求解本人不太熟练,在百度结果后得到,求空间复杂度的过程比较复杂,简单算法的空间复杂度一般为O(1)。
5.实验课的个人感想
感觉结对编程的合作方式非常好,在解决算法问题的时候不再有单打独斗的感觉,有问题可以大家一起解决。