package com.suibian.demo1; /*二分查找 前提条件:数组中的数据必须是有序的 核心逻辑:每次排除一半查找范围 1.min和max表示要查找的范围 2.mid表示在min和max中间的 3.如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid-1 4.如果要查找的元素在mid的右边,缩小范围时,max不变,min等于min+1*/ public class Test{ public static void main(String[] args) { int[] arr = {7, 12, 21, 35, 37, 52, 64, 77, 87, 90, 95}; System.out.println(binarySearch(arr, 77)); // 7 } // 二分查找 private static int binarySearch(int[] arr, int num) { int min = 0; int max = arr.length - 1; while (true) { if (min > max) { return -1; } int mid = (min + max) / 2; if (arr[mid] > num) { max = mid - 1; } else if (arr[mid] < num) { min = mid + 1; } else { return mid; } } } }