数组的二分查找

数组的二分查找步骤:

  1. 定义两个变量,表示要查找的范围。默认min =0,max =最大索引
  2. 循环查找,但是min <=max
  3. 计算出mid 的值
  4. 判断mid 位置的元素是否为要查找的元素,如果是直接返回对应索引
  5. 如果要查找的值在mid 的左半边,那么max值不变,min = mid -1,继续下次循环查找
  6. 如果要查找的值mid的右半边,那么max 值不变,min = mid +1.继续下次循环查找
  7. 当min > max 时,表示要查找的元素在数组中不存在,返回-1,

ps: 有序的数组

 1 public class MyBinarySearchDemo {
 2     public static void main(String[] args) {
 3         int[] arr = {1,2,3,4,5,6,7,8,9,10};
 4         int number =3;
 5 
 6         int index = binarySearchForIndex(arr, number);
 7         System.out.println(index);
 8     }
 9 
10     private static int binarySearchForIndex(int[] arr, int number) {
11         //1.定义查找的范围
12         int min = 0;
13         int max = arr.length -1;
14         //2,循环查找 min <= max
15         while (min <= max) {
16             //3.计算出中间的位置
17             int mid = (min + max)/2;
18             //mid指向的元素 > number
19             if (arr[mid] > number) {
20                 //表示要查找的元素在左边
21                 max =mid -1;
22             } else if (arr[mid] < number) {
23                 //mid指向的元素 <number
24                 //表示要查找的元素在右边
25                 min = mid + 1;
26             } else {
27                 //mid指向的元素 == number
28                 return mid;
29             }
30         }
31         //如果min大于了max就表示元素不存在,返回-1。
32         return -1;
33     }
34 }

Arrays 工具类

Arrays.binarySearch(int[] a,int key) 利用二分查找返回指定元素的索引

posted @ 2020-06-08 19:13  L_697  阅读(213)  评论(0)    收藏  举报