[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/TheAlgorithms/JavaScript/master/Search/JumpSearch.js [Back]  [Original]

/* The Jump Search algorithm allows to combine a linear search with a speed optimization.
 * This means that instead of going 1 by 1, we will increase the step of n and increase that
 * step of n which make the step getting bigger and bigger.
 * The asymptotic analysis of Jump Search is o(n). Like the binary search, it needs to be sorted.
 * The advantage against binary search is that Jump Search traversed back only once.
 */

const jumpSearch = (arr, value) => {
  const length = arr.length
  let step = Math.floor(Math.sqrt(length))
  let lowerBound = 0
  while (arr[Math.min(step, length) - 1] < value) {
    lowerBound = step
    step += step
    if (lowerBound >= length) {
      return -1
    }
  }

  const upperBound = Math.min(step, length)
  while (arr[lowerBound] < value) {
    lowerBound++
    if (lowerBound === upperBound) {
      return -1
    }
  }
  if (arr[lowerBound] === value) {
    return lowerBound
  }
  return -1
}

export { jumpSearch }

Web Proxy Viewer  |  New URL  |  Original Page