- 原理 : 每次去掉一般的查找范围
- 前提 : 数组必须有序 :::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) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
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;
// 2,循环查找,但是min <= max<br /> while (min <= max) {<br /> // 3,计算出mid的值<br /> int mid = (min + max) / 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 />}
:::