Java中的二进制搜索小错误

罗维杜·乌德什(Rovidu Udesh)
int m, l, f, k = 4;
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

f = 0;
l = a.length - 1;
m = (f + l) / 2;

for (int i = 0; i < a.length; i++) {
    if(a[m] > k) {
        f = 0;
        l = m - 1;
    }
    if(a[m]<k) {
        f = m + 1;
        l = a.length - 1;
    }       
    m = (f + l) / 2;
}
if(k == a[m]) {
    System.out.println("found");
} else {
    System.out.println("not found");
}

当我把k = 4和k = 6时,它说找不到。我可以知道什么位置需要正确吗

XpressOneUp

用这个:

    int middle;
    int right;
    int left;

    int k = 1;

    int[] a = {1,2,3,4,5,6,7,8,9,10};

    left = 0;
    right = a.length - 1;

    middle = (left + right)/2;

    for (int i = 0; i < a.length; i++ ) {
        if(a[middle] > k) {
            right = middle - 1;
        }
        if(a[middle] < k) {
            left = middle + 1;
        }
        middle=(left + right)/2;
    }

    if (k == a[middle]) {
        System.out.println("found");
    } else {
        System.out.println("not found");
    }

另外,您应该更加注意变量名。诸如此类i, k, m, a名称确实具有误导性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章