二分查找java实现
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是查找次数,即时间复杂度。



