• 原理 : 每次去掉一般的查找范围
    • 前提 : 数组必须有序 :::tips package com.itheima.arraysort_demo.binarysearch_demo;

    /
    二分查找 :
    原理 : 每次去掉一般的查找范围
    前提 : 数组必须有序
    步骤 :
    1,定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引
    2,循环查找,但是min <= max
    3,计算出mid的值
    4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
    5,如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
    6,如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
    7,当 min > max 时,表示要查找的元素在数组中不存在,返回-1.
    /
    public class BinarySearchDemo {
    public static void main(String[] args) {

    1. int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    2. int i = binarySearch(arr, 8);<br /> System.out.println(i);

    }

    public static int binarySearch(int[] arr, int num) {
    // 定义两个变量,表示要查找的范围。默认min = 0 , max = 最大索引
    int max = arr.length - 1;
    int min = 0;

    1. // 2,循环查找,但是min <= max<br /> while (min <= max) {<br /> // 3,计算出mid的值<br /> int mid = (min + max) / 2;
    2. if (arr[mid] == num) {<br /> // 4,判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引<br /> return mid;<br /> } else if (arr[mid] > num) {<br /> // 5,如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找<br /> max = mid - 1;<br /> } else if (arr[mid] < num) {<br /> // 6,如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找<br /> min = mid + 1;<br /> }<br /> }<br /> return -1;<br /> }<br />}

    :::