Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 由于索引,二进制搜索无法工作?_Javascript_Algorithm_Binary Search - Fatal编程技术网

Javascript 由于索引,二进制搜索无法工作?

Javascript 由于索引,二进制搜索无法工作?,javascript,algorithm,binary-search,Javascript,Algorithm,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) r

我在看

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

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,这是预期的吗


您是否尝试过在Javascript中搜索二进制搜索实现(例如)?
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);