数组是有序的且是升序排序,示例代码如下
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,78};
// int index = binarySearch(arr, 781);
int index = binarySearch(arr, 0,arr.length-1,0);
System.out.println(index);
}
/**
* 递归二分查询
* @param arr 数组
* @param left 左边的索引
* @param right 右边的索引
* @param findVal 要查找的值
* @return 如果找到就返回下标,如果没有找到,就返回 -1
*/
public static int binarySearch(int[] arr, int left, int right, int findVal) {
if (left > right) {
return -1;
}
int mid = (left +right)/2;
if (arr[mid] == findVal) {
return mid;
}
if (arr[mid] < findVal) {
// 向右边查询
return binarySearch(arr, mid + 1, right, findVal);
}else {
// 向左边查询
return binarySearch(arr, left, mid - 1, findVal);
}
}
/**
*
* 非递归二分查询
* @param arr 数组
* @param findVal 要查找的值
* @return 如果找到就返回下标,如果没有找到,就返回 -1
*/
public static int binarySearch(int[] arr,int findVal) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right)/2;// 设置中间索引的值
if (arr[mid] == findVal) {
return mid;
}
if (arr[mid] < findVal) {
left= mid+1;// 往右边查询
}else {
right = mid-1;// 往左边查询
}
}
return -1;
}
}