//二分法:
// 数组的长度/2,然后拿这个从数组中取数做对比,如果小就改长度大小为当前二分的数字的大小,
// 但是如果大怎么办?需要从当前的位置和length长度之间二分,做好的方式,取两个变量,一个代表数组中最小的下标,一个最大
//0 length-1 比二分小就改变length-1的长度,比二分的数字大,修改 最小下标
public static void main(String[] args) {
int[] arry = {-1,0,3,7,9,12,34};
int flag = BinarySearch(8, arry);
System.out.println(flag);
}
public static int BinarySearch(int key, int[] arry) {
int left = 0;//下标0的定义
int right = arry.length - 1;//数组长度最大下标
while (left <= right) {//如果最小下标等于最大下标,执行
int mid = (left + right) / 2; //算出二分后下标的值:length中间一半
if (key < arry[mid]) {//如果找的值小于二分下标的值
right = mid - 1;//二分的下标-1,最小的下标不需要变,因为二分的下标已经使用了,所以-1
} else if (key > arry[mid]) {//如果查找的值大于二分下标的值,执行
left = mid + 1;//修改最小下标,当前下标+1 ,最大下标不变
} else {//如果要找的值不大于,也不小于二分的值,肯定就是等于咯,直接返回下标就可以了
return mid;
}
}//如果不在数组中,最后会出现最小下标大于最大下标,不满足while条件,返回一个错误编号
return -1;
}
网友评论