第二章上机实验报告

实验报告

1、实践题目:改进二分搜索算法

2、问题描述:设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

输入格式:

输入有两行:

第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。

输出格式:

输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值

3、算法描述:

整体思路是在方法中先判断是否比最小小或比最大大,然后用while循环,判断是否存在,若不存在,则用二分法找到比他大的的最小数和比他小的最大数。

4、算法复杂度:

时间复杂度:每执行一次while循环,数组大小减少一半,最坏情况下while被执行O(logn)次,所以时间复杂度为O(logn)

空间复杂度:不需要其他空间,空间复杂度为O(1)

5、心得体会:

刚开始想了很久要怎么做,不过后面翻了翻书发现其实跟书上的例子差别不大,而且又是没有重复数的数组,就模仿书上做下去了。最后遇到最大的难点居然是输出:在数组中找到x时是输出两次位置,而我一直只输出一次,最后的时候才反应过来会不会是输出两次,然后还真是要输出两次。感觉这里有点坑

 

你可能感兴趣的:(第二章上机实验报告)