二分查找--算法
前提
数组必须有序
思路
1.只要开始索引大于结束索引,就代表数组中没有该值
2.中间索引位置元素大于目标值
修改结束索引等于中间索引减1
3.中间索引位置元素小于目标值
修改索引等于中间索引加1
4.中间索引位置元素等于目标值
返回索引
5.不确定循环次数
while
条件:开始索引小于等于结束索引
例图:
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80, 90};
//目标值
int userNumber = 70;
//调用方法,返回索引,没有返回-1
int numberIndex = getBinarySearch(arr, userNumber);
System.out.println("值在数组中索引是:" + numberIndex);
}
/**
* //二分查找方法,返回索引,没有返回-1
* @param arr
* @param userNumber
* @return
*/
private static int getBinarySearch(int[] arr, int userNumber) {
//开始索引
int startIndex = 0;
//结束索引
int endIndex = arr.length - 1;
//判断是否存在(开始索引<=结束索引)
while (startIndex <= endIndex) {
//中间索引 = (开始+结束)÷2
int midIndex = (endIndex + startIndex) / 2;
//如果(中间索引位置元素>目标值)
if (arr[midIndex] > userNumber) {
//修改结束索引 = 中间索引 - 1
endIndex = midIndex - 1;
} else if (arr[midIndex] < userNumber) {
startIndex = midIndex + 1;
} else {
//否则 返回索引
return midIndex;
}
}
//没有返回-1
return -1;
}
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com