总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。
由于n/2^k取整后>=1,即令n/2^k=1,
可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)
public static boolean binarySearch(int[] a,int k){
int low=0,high=a.length-1;
while(low<=high){
int middle=(low+high)/2;
if(k==a[middle]){
return true;
}else if(k<a[middle]){//在左半区
high=middle-1;
}else if(k>a[middle]){//在右半区
low=middle+1;
}
}
return false;
}