1.实践题目
二分查找
2.问题描述
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入格式:
输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
3.算法描述用了标准的二分法。比较查找数与中间值的大小,如果查找数大,搜索范围缩为中间值右边区域,如果查找数小,搜索范围缩小为中间值左边区域,直到查找数等于中间值。
4.算法时间及空间复杂度
每次查找范围减半,所以时间复杂度为O(logn)
辅助空间为常数级别,所以空间复杂度为O(1)
5.心得体会
在二分法的基础上不断拓展,学到了很多应用方法。但总是会在while循环中搞混,搞不清语句应该放在哪个循环体中,判断的语句也经常考虑不够周到。所以还是要把最基础的先运用熟练才能对付这些拓展的题目,要多看书上的例子。