二分查找java实现
/**
* 二分查找算法:在目标数组中查找是否存在key,存在返回数据下标,不存在返回-1
* @param key 要查找的数据
* @param arr 需要查找的目标数据
* @return 存在返回数组下标,不存在返回-1
*/
public int binarySearch(int key,int[] arr){
//初始化数组边界
int left=0,right=arr.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if (key==arr[mid]){
return mid;
}else if (key>arr[mid]){
left=mid+1;
}else{
right=mid-1;
}
}
return -1;
}
什么时间复杂度是O(logN),N是数据长度,
最坏的情况:
第一次查找:剩余数组的个数:N/2;
第二次查找:剩余数组的个数:N/2/2;
第三次查找:剩余数组的个数:N/2/2/2;
…
第x次查找:剩余数组的个数:N/2/2/2;N/(x个2)直到剩余1数组元素,无法再次查找,结束
因此:
N(1/2)^x=1。x = logN
x是查找次数,即时间复杂度。