/* 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; } const arr = [0,0,4,7,10,23,34,40,55,68,77,90] jumpSearch(arr,4); jumpSearch(arr,34); jumpSearch(arr,77);