又称为二分查找
前提:线性表的记录必须是关键码有序,线性表必须采用顺序存储。
思想:在有序表中,取中间记录为比较对象,如果相同则查找成功;若给定值小于中间记录的关键字,则在中间记录左边继续查找;若给定值大于中间记录的关键字,则在中间记录右边继续查找。不断重复上述过程,直到查找成功,或查找区域无位置,查找失败为止。
public int Find(int key, int a[]) {
int low,high,mid;
low=0;
high=a.length-1;
while(low<=high){
mid=(low+high)/2;
if(key<a[mid]){
high=mid-1;
}else if(key>a[mid]){
low=mid+1;
}else{
return mid;
}
}
return 0;
}
时间复杂度O(logn)