二分查找(Binary Search)又称折半查找,它是一种在有序数组中查找特定元素的搜索算法。

二分查找的基本思路是:首先,确定要查找的范围,即将数组的中间元素与要查找的元素进行比较。如果中间元素等于要查找的元素,则查找成功;如果中间元素大于要查找的元素,则在左半边继续查找;如果中间元素小于要查找的元素,则在右半边继续查找。重复这个过程,直到找到要查找的元素或者确定要查找的范围为空。

下面是Java中的二分查找示例代码:

public class BinarySearch {
    /**
     * 二分查找
     * @param arr 有序数组
     * @param key 要查找的元素
     * @return 返回元素的下标,如果找不到则返回-1
     */
    public static int binarySearch(int[] arr, int key) {
        int left = 0; // 左边界
        int right = arr.length - 1; // 右边界

        while (left <= right) {
            int mid = (left + right) / 2; // 中间位置
            if (arr[mid] == key) { // 找到了
                return mid;
            } else if (arr[mid] > key) { // 在左半边查找
                right = mid - 1;
            } else { // 在右半边查找
                left = mid + 1;
            }
        }

        return -1; // 没找到
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9};
        int key = 5;
        int index = binarySearch(arr, key);
        if (index != -1) {
            System.out.println("找到了,下标为:" + index);
        } else {
            System.out.println("没找到");
        }
    }
}

以上代码中,binarySearch方法接受一个有序数组和要查找的元素,返回元素的下标,如果找不到则返回-1。在方法中,使用left和right分别表示数组的左右边界,使用mid表示中间位置。在while循环中,不断更新left和right,并计算mid的值。如果找到了要查找的元素,就返回mid的值;如果mid的值大于要查找的元素,就在左半边继续查找;如果mid的值小于要查找的元素,就在右半边继续查找。最终,如果没有找到就返回-1。

下面我们来演示一下二分查找的流程:

假设有一个有序数组arr,其内容为{1, 3, 5, 7, 9},我们要查找元素5。初始时,left为0,right为4,mid为2,arr[mid]为5。

第一次循环:

arr[mid] == key,找到了,返回mid的值2。

演示结束

详解java中的二分查找并演示流程

原文地址: https://www.cveoy.top/t/topic/cken 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录