1.问题
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.
2.解析
1、顺序查找:
从数组的第一个数开始按顺序查找,将每一个数与x相比,直到找到该数。
2、二分查找:
将这个数组分为两部分,取中间值与要查找的值相比较,如果比要查找的值值大那就在左半边查找,反之则在右半边查找,逐渐缩小范围。
3.设计
1、顺序查找:
int Search(int T[],int n,int x)
{
for(int i=0;i<n;i++)
{
if(x==T[i])
return i;
}
return 0;
}
2、二分查找:
int Binary_Search(int T[],int n,int x)
{
int high=n;
int low=1;
int m;
while(low<=high)
{
m=floor((high+low)/2.0);
if(x<T[m])
high=m-1;
else if(x>T[m])
low=m+1;
else
return m;
}
return 0;
}
4.分析
1、顺序查找:O(n)
2、二分查找:O(logn)
5.源码
顺序查找