算法第二章上机实践报告
1、实践题目
二分查找
2、问题描述
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
3、算法描述
定义search函数,递归的结束条件是(right < left),输出-1;
Search函数中,取数组a的第mid的值,将a[mid]与x比较;
当x<a[mid],说明x在left-(mid-1)的范围内,然后继续运行search函数;
当x>a[mid],说明x在(mid+1)-right的范围内,然后继续运行search函数;
4、算法时间及空间复杂度分析(要有分析过程)
二分查找的平均查找长度为 (n+1)/n log2(n+1)-1
当n较大时,近似于:log2(n+1)-1
所以时间复杂度为O(log2n)
二分查找过程中无需另外申请其他空间
所以空间复杂度为O(1)
5、心得体会(对本次实践收获及疑惑进行总结)
由于题目要求输出-1,之前就有return -1的步骤,就由于-1 不属于int类型,在定义函数的时候就试着定义为double类型,然后之后结果就一直输出不对,之后就直接放弃return ,改成直接输出
在统计次数的时候,想过是重复search函数的,然后后来发现其实直接定义个全局变量来统计就好了
因为定义名为times,而在PTA上编译错误,之后改了就好了。