1.实践题目:
二分查找:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
2.问题描述:
输入格式:
输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
3.算法描述
运用二分查找方法。
一、构造二分查找函数:(1)初始化左下标left为0、右下标right为n-1、比较次数count为0、mid为二分查找中间的数。(2)二分查找输入数x,若mid大于或小于x,则继续进行二分查找;若mid正好等于x,则输出mid下标及此时的count值。(3)当left大于right,则证明改有序数列不存在x,输出-1。
二、在主函数中按要求输入,并调用二分查找函数。
4.算法时间及空间复杂度分析(要有分析过程)
由于运用了二分查找法,每次都折半查找,即将问题分为等大的两个小问题,所以时间复杂度为:T(n) = T(n/2) +O(1)=O(logn);由于辅助空间是常数级,所提空间复杂度为O(1)。
5.心得体会(对本次实践收获及疑惑进行总结)
这次上机实践和以往不同在于两人合作,一个人打代码,另一个人看着她打代码。两个人发现的问题也比一个人多,有报错时可以更快的找到解决方法,提高了时间效率。虽然二分查找法在大一下学期的数据结构课上学过,但本次上机让我更加清晰的了解了二分法的具体实践。我觉得老师在我们打完一题的代码后,让两人中非打代码的同学讲述一遍算法实现的方法很好,可以检验该同学是否真正理解该算法,及时发现问题所在。