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;
    }
    }
posted @   OnlyOnYourself-Lzw  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示