首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:二进制搜索

Java:二进制搜索
EN

Stack Overflow用户
提问于 2017-08-27 10:28:39
回答 2查看 328关注 0票数 2

这是二进制搜索算法的ok实现吗?它是有效的,但它是我想出来的一个实现,与我的导师不同。有人能帮我在上面打个洞吗?

代码语言:javascript
运行
复制
package algorithm.linearsearch;

公共类BinarySearch {

代码语言:javascript
运行
复制
public static void main(String[] args) {
    System.out.println(binarySearch(
            new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 26, 109, 1001, 1100 },
            26));

}

private static int binarySearch(int[] array, int target) {
    int p = 0;
    int r = array.length - 1;
    int q;

    while (p <= r) {
        q = (p + r) / 2;
        if (array[q] == target) {
            System.out.println("value: " + array[q]);
            return q;
        }
        if (array[q] > target) {
            r = q + 1;
        } else {
            p = q - 1;
        }

    }

    return -1;

}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-27 10:45:37

就是这个

代码语言:javascript
运行
复制
if (array[q] > target) {
    r = q + 1;
} else {
    p = q - 1;
}

应该是

代码语言:javascript
运行
复制
if (array[q] > target) {
    r = q - 1; // index lower to current pivot
} else {
    p = q + 1; // index upper to current pivot
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-27 16:46:31

有一件事我可以说。如果找到,你的程序应该返回index,如果没有找到,则返回-1。因此,您不需要将值作为从用户获取的关于要查找哪个元素的输入值。

最初你需要检查你的数组是否为空,返回-1,以避免在计算数组长度时发生空指针异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45901216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档