二分查找
1.问题
在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.
2.解析
将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
3.设计
l=1,r=n;//l,r为数组边界
while(l<r){
int mid=(l+r)/2;
if(T[mid]<x){
l=mid+1;
}
else{
r=mid;
}
}
4.分析
时间复杂度:O(logn)