diff --git a/Search/jumpSearch.js b/Search/jumpSearch.js new file mode 100644 index 000000000..35afb6005 --- /dev/null +++ b/Search/jumpSearch.js @@ -0,0 +1,37 @@ +/* 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);