欢迎访问宙启技术站
智能推送

如何在Java中实现二分查找功能

发布时间:2023-12-07 10:24:59

在Java中,可以使用循环或递归的方式实现二分查找功能。下面将分别介绍这两种实现方式。

1. 循环实现二分查找:

循环实现二分查找是在一个有序数组中查找目标元素的过程,每次将数组的中间元素与目标元素进行比较,如果中间元素等于目标元素,则返回其索引;如果中间元素大于目标元素,则将查找范围缩小为左半部分;如果中间元素小于目标元素,则将查找范围缩小为右半部分。直到找到目标元素或查找范围缩小为0时,停止查找。

下面是一个使用循环实现二分查找的例子:

public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int low = 0;
        int high = arr.length - 1;
        
        while (low <= high) {
            int mid = (low + high) / 2;
            
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] > target) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }
        
        return -1;
    }
    
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int target = 6;
        int result = binarySearch(arr, target);
        
        if (result == -1) {
            System.out.println("Element not present in array");
        } else {
            System.out.println("Element found at index " + result);
        }
    }
}

2. 递归实现二分查找:

递归实现二分查找是通过不断缩小查找范围,在每次递归调用中逐渐靠近目标元素。在递归调用时,将数组的中间元素与目标元素进行比较,如果中间元素等于目标元素,则返回其索引;如果中间元素大于目标元素,则在左半部分继续递归查找;如果中间元素小于目标元素,则在右半部分继续递归查找。直到找到目标元素或查找范围缩小为0时,停止递归。

下面是一个使用递归实现二分查找的例子:

public class BinarySearch {
    public static int binarySearch(int[] arr, int low, int high, int target) {
        if (low <= high) {
            int mid = (low + high) / 2;
            
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] > target) {
                return binarySearch(arr, low, mid - 1, target);
            } else {
                return binarySearch(arr, mid + 1, high, target);
            }
        }
        
        return -1;
    }
    
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int target = 6;
        int result = binarySearch(arr, 0, arr.length - 1, target);
        
        if (result == -1) {
            System.out.println("Element not present in array");
        } else {
            System.out.println("Element found at index " + result);
        }
    }
}

这两种实现方式都可以有效地在有序数组中查找目标元素,并返回其索引值或特定标识(比如-1表示未找到)。可以根据具体需要选择适合的实现方式。