直接上代码吧
package com.test;
/**
* 二分查找
*
* @Package: com.test
* @ClassName: BinarySearch
* @author: zq
* @since: 2020/6/1 20:48
* @version: 1.0
* @Copyright: 2020 zq. All rights reserved.
*/
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 9, 8, 0};
int num = 8;
int index = binarySearch(arr, num);
System.out.println(index);
}
/**
* 根据数组和要查找的值,返回要查找的值的索引
*
* @param arr
* @param num
* @throws
* @Title: <p>binarySearch</p>
* @return: int
* @author: zq
* @Date: 2020/6/1 21:09
* @version: 1.0
* @Copyright: zq. All rights reserved.
*/
public static int binarySearch(int[] arr, int num) {
//最小索引
int min = 0;
//最大索引
int max = arr.length - 1;
//如果最小索引大于最大索引,说明要找的数据不存在,否则继续吧遍历
while (min <= max) {
//找到中值
int mid = (min + max) >> 1;
//如果中值索引对应的数据比要找的数据大,则去掉右半边,最大索引等于中值减一
if (arr[mid] > num) {
max = mid - 1;
//如果中值索引对应的数据比要找的数据小,则去掉左半边,最小索引等于中值加一
} else if (arr[mid] < num) {
min = mid + 1;
} else {
//如果中值索引对应的数据等于要找的数据,则直接返回中值
return mid;
}
}
return -1;
}
}