写出两种检索算法,在一个排好序的数组T[1…n]中查找x
1.问题
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。
2.解析
顺序查找:按照数组长度,一个个查找,直到找到关键词后返回该关键词下标,找不到则返回0
二分查找:将数据不断进行对半分割,并检查每个分区的中间元素
3.设计
顺序查找:
for(int i=0; i<len; i++){
if(array[i]==x){
k = 1;
cout << i << " ";
}
}
if(k == 0) cout<<"j=0";
二分查找:
int binary_search(int x, int a[], int n){
int low, high, mid, count=0;
low = 0;
high = n-1;
while(low < high){
mid = (low+high)/2;
if(x < a[mid])
high = mid-1;
else if(x > a[mid])
low = mid+1;
else if(x == a[mid]){
cout<<mid;
count = 1;
break;
}
}
if(count == 0)
cout<<"j=0";
return 0;
}
4.分析
时间复杂度:
顺序查找:O(n)
二分查找:O(log2(n))