使用javascript进行二进制搜索

时间:2014-09-29 05:09:25

标签: javascript binary-search

我正在将c ++代码转换为here的javascript。其余的代码看起来很好但是跟随函数有问题。首先,while循环中的第二行抛出错误Uncaught ReferenceError: Invalid left-hand side in assignment。当我将其更改为m = (A[m] >= key ? r : l);时,此循环变为无限。 如何在javascript中解决?

    function CeilIndex(A, l, r, key) {
        var m;

        while( r - l > 1 ) {
            m = l + (r - l)/2;
            (A[m] >= key ? r : l) = m; // ternary expression returns an l-value
        }

        return r;
    }

3 个答案:

答案 0 :(得分:1)

if (A[m] >= key) {
    r = m;
} else {
    l = m;
}

除了属性之外,JavaScript不能拥有变量左值(即你可以obj[A[m] >= key ? 'r' : 'l'] = m,但不能提出你提出的值。)

答案 1 :(得分:1)

你只需要正确地打破你的左侧。我不知道您尝试做什么,但假设您将m分配给rl

if (A[m] >= key) {
    r = m;
} else {
    l = m;
}

答案 2 :(得分:1)

在JavaScript中,您可以这样做:

A[m] >= key ? r = m : l = m;