面试题回顾(我的逻辑很差)
面试题中常常见到二分查找,特此来回顾一下二分查找算法
来巩固一下算法,以下是个人思想的注释
public class BinarySearch2 {
public static void main(String[] args) {
int[] arr = {2,3,6,18,22,34,66,77,88,99};
System.out.println(findNum(arr,99));
}
/**
*
* @param arr 要查找数的数组
* @param key 要查找的参数
* @return
*/
public static int findNum(int[] arr,int key){
int mid = arr.length/2;//下标中间值
if(arr[mid]==key){//如果中间下标的这个数组的值和这个key相等的话,就返回这个下标
return mid;
}
//else就重新来过,进行下标的重新划分,看看这个数字是比中间大还是中间小,大了到右边,小了到左边
int start = 0;
int end = arr.length-1;
while(start<=end){ //循环条件 这个数组的开始和结束如果一直不重合的话就进行循环一直进行 比较
//重新去取中间值
mid = (end-start)/2+start;//这是重新计算的中间值下标
//如果这个重新划分的中间值和这个key相等的话,就说明找到了,就可以退出循环
if(arr[mid]==key){
return mid;
}else if(arr[mid]>key){
end = mid - 1;//中间到末尾段的二分段
}else{
start = start+1;//开始到中间段的二分段
}
}
return -1;
}
}