17-实现二分查找
实现二分查找
-
二分查找的实现也很简单,如下所示
-
import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class BinarySearch { /* 二分查找原理: 顾名思义,就是在一个数组中查找一个特定的值 二分查找可以在每次查找后,减少一半的查找量 但是二分查找有个前提就是数组必须是先排序好的。 */ public static void main(String[] args) { // 随机生成(1-100)的指定长度的数组 Scanner scanner = new Scanner(System.in); System.out.print("请输入指定的数组长度:"); int[] arr = randomArr(scanner.nextInt()); System.out.println("源数组: arr = " + Arrays.toString(arr)); System.out.print("请输入要查找的元素:"); int key = scanner.nextInt(); int index = binarySearch(arr, key); if (index != -1) { System.out.println(key + "值在数组中的索引为:" + index); } else { System.out.println("数组中不存在" + key + "元素!"); } } private static int binarySearch(int[] arr, int key) { // 定义小索引min,和大索引max int min = 0; int max = arr.length - 1; // 循环查找 while (min <= max) { // 计算中间索引 // 中间索引 = (最小索引 + 最大索引) / 2 int middle = (min + max) / 2; // 拿要查找的元素和中间索引对应的元素比较 // 如果要查找的元素小于中间索引对应的元素,那么大索引等于中间索引-1 // 如果大于中间元素对应的索引,那么小索引等于中间索引+1 if (key < arr[middle]) { max = middle - 1; }else if (key > arr[middle]) { min = middle + 1; }else { return middle; } } return -1; } private static int[] randomArr(int length) { Random random = new Random(); System.out.print("请输入数组的长度:"); int[] arr = new int[length]; for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(101) + 1; } Arrays.sort(arr); return arr; } }