两种检索算法
1. 问题
写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.
2. 解析
顺序查找:对于任意一个序列及给定元素,将该元素与序列中元素依次比较,直到在序列中找出与该元素相同的元素,或者将序列中的元素全部查找但没有发现相同元素。
二分查找: 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
3. 设计
[核心伪代码]
顺序查找:
int Search(int T[],int n,int x)
{
for(int i=0;i<n;i++)
{
if(x==T[i])
return i;
}
return 0;
}
二分查找:
int Binary_Search(int T[],int n,int x)
{
int l=1,r=n;
int mid;
while(l<=r)
{
mid=floor((l+r)/2.0);
if(x<T[mid])
r=mid-1;
else if(x>T[mid])
l=mid+1;
else
return mid+1;
}
return 0;
}
4. 分析
[算法复杂度推导]
顺序查找:时间复杂度为:O(n)。
二分查找:时间复杂度:O(logn)。