二分查找又称折半查找,前提是线性表中的记录必须关键码有序(通常从小到大有序)。
基本思想是:在有序表中,取中间的数作为比较对象,若指定值和中间记录的关键字相等,则查找成功;若小于中间,则在中间记录的左半区域继续查找。若大于中间,则在中间的右边区域继续查找。不断重复上面操作直到查找成功,或所查找区域无记录,查找失败为止。
实现:(时间复杂度o(logn))
private int search(int[] arr,int target){
int low=0;;
int high=arr.length-1;
while(low<=high){
int mid=(low+high)/2;
if(arr[mid]==target){
return mid;
}else if(arr[mid]<target){
low=mid+1;
}else{
high=mid-1;
}
}
return -1;
}
扩展:二维数组中的查找
https://blog.csdn.net/orangefly0214/article/details/82999125