java - 如何使用递归创建二进制搜索算法

标签 java algorithm binary-search

我一直在利用大学假期通过编码算法练习 Java。我编码的算法之一是二进制搜索:

public class BinarySearch {

    private static int list[] = {3, 6, 7, 8, 9, 10};

    public static void main(String[] args) {
        BinarySearch b = new BinarySearch();
        b.binarySearch(list);

    }

    public void binarySearch(int[] args) {
        System.out.println("Binary search.");

        int upperBound = args.length;
        int lowerBound = 1;
        int midpoint = (upperBound + lowerBound) / 2;
        int difference = upperBound - lowerBound;

        int search = 7;

        for (int i = 0; i < args.length; i++) {
            if (search < args[midpoint - 1] && difference != 1) {
                upperBound = midpoint - 1;
                midpoint = upperBound / 2;
            } else if (search > args[midpoint - 1] && difference != 1) {
                lowerBound = midpoint + 1;
                midpoint = (lowerBound + upperBound) / 2;

            } else if (search == args[midpoint - 1]) {
                midpoint = midpoint - 1;

                System.out.println("We found " + search + " at position " + midpoint + " in the list.");
                i = args.length;
            } else {
                System.out.println("We couldn't find " + search + " in the list.");
                i = args.length;
            }
        }
    }
}

我真的希望能够编写一个更简洁、更高效的二进制搜索算法,以替代我编写的代码。我已经看到了如何使用递归的示例,例如在对我理解的数字进行阶乘时。然而,在编写如此复杂的代码时,我对如何利用它来发挥自己的优势感到困惑。因此,我的问题是在编写二进制搜索算法时如何应用递归。如果您有任何提示可以帮助我完善我的递归技能,即使它必须是与二进制搜索无关的东西,那么请随时发布。

最佳答案

如果你真的想使用递归,应该这样做。

public static int binarySearch(int[] a, int target) {
    return binarySearch(a, 0, a.length-1, target);
}

public static int binarySearch(int[] a, int start, int end, int target) {
    int middle = (start + end) / 2;
    if(end < start) {
        return -1;
    } 

    if(target==a[middle]) {
        return middle;
    } else if(target<a[middle]) {
        return binarySearch(a, start, middle - 1, target);
    } else {
        return binarySearch(a, middle + 1, end, target);
    }
}

关于java - 如何使用递归创建二进制搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012677/

相关文章:

java - Java Parrot 程序简介

ruby - 查找数据库中大量数据的词频

java - 使用递归二分搜索对数组进行排序

python - 二叉树解释为什么这样做

java - 用 Java 编码视频

java - 创建包含数据库值的列表并将其存储在 DTO 中

java - 如何使用 JSP 实现此模式

algorithm - 嵌套循环中的步骤数

algorithm - 寻路算法难度

c - 搜索不起作用需要一些建议