二分查找--算法

二分查找【重点】

  前提

    数组必须有序

  思路

    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;
}
posted @ 2020-09-01 14:39  骚哥  阅读(175)  评论(0编辑  收藏  举报