解析
数组中元素的下标比与他们的值的比是近似的。 目标元素下标减去lo比hi-lo 约等于 目标元素减去第lo个元素比第hi个元素减去第lo个元素。 未知数为目标元素的下标,换算一下将等式的左边只剩下目标元素下标mid,我们可以通过迭代逐步缩小mid的范围
function interpolationSearch(arr,num) {
let lo = 0, hi = arr.length-1
while (lo<=hi){
let mid = Math.floor(lo + (hi-lo)*(num-arr[lo])/(arr[hi]-arr[lo]))
if(arr[mid]==num) return mid
arr[mid]<num?
lo = mid + 1 :
hi = mid - 1
}
return -1
}