1、问题:
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
2、解析:
- 第一种检索算法就是遍历一遍这个数组,如果x在T中就输出下标,不在T中就输出j
- 第二种检索算法就是二分,这里我们可以用c++自带的lower_bound函数,去查找第一个大于等于出现x的位置的下标
3、设计(核心伪代码):
For(i : 1 ~ n)
If( T[i] == x) ...
Index = lower_bounde(T + 1, T + 1 + n, x) - T - 1;
4、分析:
- 第一种遍历算法的时间复杂度为O(n)
- 第二种二分算法的时间复杂度为O(logn)