使用Javascript ES6递归进行二进制搜索

时间:2019-02-10 21:42:02

标签: javascript recursion binary-search

我正在尝试使用Java递归实现二进制搜索。

假设数组已排序。

功能签名可以如下所示:

BinarySearchRecursively (ArrayGiven, x, p, r)

其中ArrayGiven是一个数组,x是我们要查找的数字。 p是开始索引,r是结束索引。

任何Jsbin / Jsfiddle链接将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是我实现它的方式。在顶部的注释中实现了psedo代码。

这是js bin:https://jsbin.com/womenov/3/edit?js,console 任何反馈将不胜感激。

/**
 * Binary Search using Recursion
 * p.......q........r : range where p is start, r is end
 * Assume the array is sorted.
 * Procedure BinarySearchRecursively(ArrayGiven, x, p, r, q = 0)
 * if(p > r) return -1
 * q = Math.floor((p+r)/2)
 * if(x === ArrayGiven[q]) return q
 * else if(x > ArrayGiven[q]) set p = q+1
 *    return BinarySearchRecursively(ArrayGiven, x, q + 1, r)
 * else r = q-1 return BinarySearchRecursively(ArrayGiven, x, p, q-1)
 *
 */

function BinarySearchRecursively (ArrayGiven, x, p, r, q = 0) {
        if (p > r) {
            return -1;
        }
        q = Math.floor((p+r)/2);
    if (x === ArrayGiven[q]) {
        return q;
    }
    if (x > ArrayGiven[q]) {
        return BinarySearchRecursively(ArrayGiven, x,q+1, r);
    }
    return BinarySearchRecursively(ArrayGiven, x, p,q-1);
}

const TestArray = [2, 6, 8, 9, 11, 15];
console.log(`Given Element is at position : ${BinarySearchRecursively(TestArray, 2, 0,5)}`);