思路
每一次查找,将查找的区间从中间分为两部分,若查找值大于中间的元素,则在右侧区间继续查找;若查找值小于中间的元素,则在左侧区间继续查找。
特点
折半查找的先决条件是查找表中的数据元素必须有序。
代码
public int binarySearch(Comparable[] a,Comparable findElem)
{
int low=0;
int high=a.length()-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(findElem<a[mid])
high=mid-1;
if(findElem>a[mid])
low=mid+1;
if(findElem==a[mid])
return mid;
}
return -1;
}
时间复杂度为O(log2n)。