我正在尝试使用Java递归实现二进制搜索。
假设数组已排序。
功能签名可以如下所示:
BinarySearchRecursively (ArrayGiven, x, p, r)
其中ArrayGiven是一个数组,x是我们要查找的数字。 p是开始索引,r是结束索引。
任何Jsbin / Jsfiddle链接将不胜感激。
答案 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)}`);