算法第二章上机实践报告
1、实践题目:二分查找
2、问题描述:
输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
3、算法描述
①利用(left+right)/2求出数组中间的下标mid
②判断a【mid】与目标x是否相等。若不相等,则判断x在a【mid】的左边还是右边
③改变数组的left和right进行递归重复步骤一二并比较次数count+1直到找到x,当left>right为停止条件。
4、算法时间及空间复杂度分析
每进行一次二分搜索,待搜索的数组大小减少一半,最坏情况下需要log2n次,而递归函数中运算只需要O(1)时间,所以二分搜索算法时间复杂度为O(log2n)。
辅助空间mid、count等都是基本数据类型,所以空间复杂度为O(1)。
5、心得体会
这次利用二分搜索应用递归的方法,对递归有了更好的认识。先想清楚停止条件,再把问题分解为两个子问题,根据不同的判断条件进行不同参数的递归调用。而在比较次数的统计中一开始的想法是每一次if判断语句里面加一个count++进行统计,但经过老师提醒,没必要在每一个if里面加,而是放在外面,因为每一次递归都要进行一次比较才能继续运行。总体来说,两个人合作编程,对编程过程中出错的小细节都比较容易发现,让A题更容易了,也了解到自己平常思路上的不足。

浙公网安备 33010602011771号