1.问题
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
2.解析
暴力查找,for循环遍历完一次数组
二分查找,每次都通过跟区间的中间元素对比,将带查找的区间缩小为之前的一半,知道找到要查找的元素,或者区间被缩小为0
3.设计
暴力查找:
int find(int n,int m){
int ans=0;
for(int i=0;i<n;++i){
if(mT[i]){
ans=i+1;
break;
}
}
return ans;
}
二分查找:
int find(int n,int m){
int ans=0;
int l=0,r=n-1;
while(l<=r){
int mid=(l+r)/2;
if(mT[mid]){
ans=mid+1;
break;
}
else if(m>T[mid]){
l=mid+1;
}
else {
r=mid-1;
}
}
return ans;
}
4.分析
暴力查找:o(n)
二分查找:o(log(n))