0

I am looking at this binary search

I modified it a bit to the index, but cannot get it working

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);

What I want to do is:

  • pass arr.length, instead of arr.length-1

  • use if (h > l) {, instead of if (h >= l) {

Is it possible?

Prasad Telkikar
  • 15,207
  • 5
  • 21
  • 44
kenpeter
  • 7,404
  • 14
  • 64
  • 95
  • Have you tried searching for binary search implementations in Javascript (e.g. [this answer](https://stackoverflow.com/questions/22697936/binary-search-in-javascript))? – Cully May 30 '19 at 07:01

1 Answers1

1

Try this(made small change) -> returns index 4, is this expected 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);
Muthu R
  • 776
  • 1
  • 9
  • 15