javascript - 由于索引,二进制搜索不起作用?

标签 javascript algorithm binary-search

我正在查看 this binary search

我对索引做了一些修改,但无法正常工作

function bs1(a, tar, l, h) {
  // pass index, so equal
  if (h > l) { 
    // not m = (h+l)/2
    // l+diff
    //let m = l + Math.floor( (h - l) / 2 ); 
    let m = Math.floor( (h + l) / 2 ); 

    if (a[m] == tar) 
      return m; 

    // tar... a[m]....
    if (a[m] > tar) 
        return bs1(a, tar, l, m - 1); 

    // a[m]..tar...
    return bs1(a, tar, m + 1, h); 
  }

  return -1;
}

arr = [1, 2, 3, 4, 5, 6, 7];
tar = 5;
out = bs1(arr, tar, 0, arr.length);
console.log(out);

我想做的是:

  • 传递arr.length,而不是arr.length-1

  • 使用 if (h > l) {,而不是 if (h >= l) {

这可能吗?

最佳答案

试试这个(做了小改动)-> 返回索引 4,这是预期的 fiddle

function bs1(a, tar, l, h) {

  // pass index, so equal
  if (h > l) { 
    // not m = (h+l)/2
    // l+diff
    //let m = l + Math.floor( (h - l) / 2 ); 
    let m = Math.floor( (h + l) / 2 ); 

    if (a[m] == tar) 
      return m; 

    // tar... a[m]....
    if (a[m] > tar) 
        return bs1(a, tar, l, m); 

    // a[m]..tar...
    return bs1(a, tar, m + 1, h); 
  }

  return -1;
}

arr = [1, 2, 3, 4, 5, 6, 7];
tar = 5;
out = bs1(arr, tar, 0, arr.length);
console.log(out);

关于javascript - 由于索引,二进制搜索不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56373191/

相关文章:

javascript - 使用文件系统包读取文件

javascript - 如何区分手动滚动(通过鼠标滚轮/滚动条)与 Javascript/jQuery 滚动?

javascript - JQuery Mobile - 链接到外部站点,无法使用浏览器后退按钮返回页面

algorithm - 实现 : Algorithm for a special distribution Problem

algorithm - 网络中的流分解定理

java - Java 线性和二分搜索

javascript - Bootstrap 月份选择器无法正常工作

java - 我想通过使用另一个带有交换方法的类而不是通常可用的通用交换函数来交换两个数字

java - 如何检索数组列表中的元素并进行比较?

c - 使用二分搜索比较两个文件的一些快速帮助