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

如何实现Java中的二分搜索算法函数

发布时间:2023-05-30 08:57:35

二分搜索算法(Binary Search)是一种常用于在数据集合中寻找某个元素的算法。在Java中,实现二分搜索算法可以使用递归或迭代两种方式。

递归方式实现二分搜索算法

二分搜索算法的基本思想是将数据集合按照一定的规律进行分割,然后不断地缩小搜索范围。在递归方式下实现二分搜索算法,可以通过设定起点、终点和目标元素三个参数来实现。

假设需要在一个有序数组arr中寻找一个目标元素target,实现代码如下:

public static int binarySearch(int[] arr, int start, int end, int target) {
    // 如果起点大于或等于终点,说明已经搜索到数组的最后一个元素
    if (start >= end) {
        // 如果本次搜索中未找到目标元素,则返回-1
        if (arr[start] != target) {
            return -1;
        } 
        // 否则返回目标元素的位置
        else {
            return start;
        }
    }
    // 计算中间位置
    int mid = (start + end) / 2;
    // 如果中间位置元素等于目标元素,则返回其位置
    if (arr[mid] == target) {
        return mid;
    } 
    // 如果中间位置元素大于目标元素,则继续在左半边进行搜索
    else if (arr[mid] > target) {
        return binarySearch(arr, start, mid - 1, target);
    } 
    // 否则在右半边进行搜索
    else {
        return binarySearch(arr, mid + 1, end, target);
    }
}

以上代码首先判断搜索起点是否大于或等于搜索终点,如果是则表示数组已经被搜索完毕,此时需要判断最后一个元素是否为目标元素,如果不是则返回-1,否则返回该元素的位置。如果搜索起点和终点还没有重合,则计算中间位置,如果该位置元素等于目标元素则返回其位置,否则判断是否需要在左半边或右半边继续搜索。

迭代方式实现二分搜索算法

在二分搜索算法的迭代方式下实现,我们可以使用while循环来代替递归实现。其中,需要通过设置起点、终点和目标元素来进行搜索,通过每次移动起点或终点来缩小搜索范围。

迭代方式下实现代码如下:

public static int binarySearch(int[] arr, int target) {
    // 设定搜索起点和终点,分别为0和数组长度-1
    int start = 0, end = arr.length - 1;
    // 当搜索起点小于等于搜索终点时,处理搜索过程
    while (start <= end) {
        // 计算中间位置
        int mid = (start + end) / 2;
        // 如果中间位置元素等于目标元素,则返回其位置
        if (arr[mid] == target) {
            return mid;
        } 
        // 如果中间位置元素大于目标元素,则继续在左半边进行搜索
        else if (arr[mid] > target) {
            end = mid - 1;
        } 
        // 否则在右半边进行搜索
        else {
            start = mid + 1;
        }
    }
    // 如果在以上处理过程中未找到目标元素,则返回-1
    return -1;
}

以上代码采用while循环实现,在每次判断后移动搜索起点或终点,由于每次搜索范围都会缩小,因此在搜索起点大于搜索终点时,说明该数组已经被搜索完毕,此时返回-1。

总结

通过以上的讲解可以了解到,在Java中实现二分搜索算法分别有递归和迭代两种方式。递归方式主要通过递归调用实现搜索过程,而迭代方式则采用循环迭代实现搜索过程,两种方式在思路上略有不同,但二分搜索算法的基本思想,在不同的语言中,都是一致的。