一、二分查找概述
查找指定元素在数组中的位置时,以前的方式是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低。
二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率。
二、二分查找案例
- 需求
在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置 - 实现步骤
①定义两个变量,表示要查找的范围
②循环查找,但是min <= max
③计算出mid的值
④判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
⑤如果要查找的值在mid的左半边,那么min值不变,max = mid - 1,继续下次循环查找
⑥如果要查找的值在mid的右半边,那么max值不变,min = mid + 1,继续下次循环查找
⑦当min > max时,表示要查找的数组在数组中不存在,返回-1 - 代码实现:
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
Scanner sc = new Scanner(System.in);
System.out.println("输入要查找的值:");
int nextInt = sc.nextInt();
int index = binarySearchOfIndex(arr, nextInt);
if (index == -1) {
System.out.println("数组中无此值");
}
System.out.println("索引位置在:" + index);
}
public static int binarySearchOfIndex(int[] arr, int scannerInt) {
int max = arr.length - 1, min = 0;
while (min <= max) {
int mid = (max + min) >> 1;
if (scannerInt > arr[mid]) {
min = mid + 1;
} else if (scannerInt < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
}
return -1;
}
}
输入要查找的值:
10
索引位置在:9
三、二分查找注意事项
数组内的元素一定是有序的,如果没有顺序,是不能使用二分查找的