二分查找
1、查找:
(1)基本查找:数组元素无序(从头找到尾)。
(2)二分查找(折半查找):前提是数组元素有序。
分析:
A:定义最大索引和最小索引
B:计算出中间索引
C:拿中间索引的值和要查找的值进行比较
相等:就返回当前的中间索引
不相等:
大了 左边找
小了 右边找
D:重新计算出中间索引
大了 左边找
max = mid - 1;
小了 右边找
min = mid + 1;
E:回到B
2、代码演示:
package cn.itcast_01;
import java.util.Scanner;
public class binSearch {
public static void main(String[] args) {
int[] arr = { 11, 22, 44, 33, 77, 55, 98, 99, 6, 54 };
// 二分查找调用
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查找的数据:");
int value = sc.nextInt();
int index = binSearch(arr, value);
System.out.println(value + "的索引:" + index);
}
// 二分查找算法
// 两个明确:
// 返回值类型:int
// 形参列表:int[] arr, int
public static int binSearch(int[] arr, int value) {
int low = 0;
int high = arr.length - 1;
int mid = 0;
while (low <= high) {
mid = (low + high) / 2;
if (value < arr[mid]) {
high = mid - 1;
} else if (value > arr[mid]) {
low = mid + 1;
} else {
return mid;
}
}
// 没有查找到
return -1;
}
}