实践题目:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
问题描述:要求设置一个长度为n的数组,输入非降序数组,然后利用二分法查找某个数值x,查找成功则输出其所在位置及比较次数,否则输出-1及比较次数;输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。
算法描述:首先定义了两个变量Left和Right代表数组的前标和后标,每进行一次二分查找就会改变一次Left或者Right,直到最后Left=Right便查找结束。每进行一次计算就记一次比较次数,直到循环结束。对于给定值x,从序列的中间位置开始比较,如果当前位置的值等于x,则查找成功;若x小于当前的值,则在序列中间位置的·前面的数据中查找;若x大于当前的值则在序列中间位置的后面的数据中继续查找。
时间及空间复杂度:算法时间复杂度即是整个程序中while的循环次数,由于每次都是对半分割,因此此算法的时间复杂度是O(logn)。算法空间复杂度易得是O(1)
心得体会:跟组员在上机的过程中,顺利的编写出二分法的代码时,遇到了许多错误,通过网上借鉴也修改成功许多,但最后有一步骤却怎么也不对,我们俩都找不出问题的所在,后来向老师求助,原来是二分法里面,if语句后加了;,而导致的错误。