內插搜尋法(Interpolation Search ),又稱插補搜尋法,是二分搜尋法的改良版,二分搜尋法是先找出中間值,而內插搜尋法是透過斜率公式來估出資料可能存在的位置,搜尋前也必須先將資料列排序好。

下面利用10 20 30 40 50 60 70 80 90搜尋40為例。
let data = [10,20,30,40,50,60,70,80,90];
let target = 40;
function interpolationSearch(arr, target) {
  let start = 0;
  let end = arr.length - 1;
  let mid;
  while (end >= start) {
    mid = Math.floor((target - arr[start]) * (end - start) / (arr[end] - arr[start]) + start);
    if (arr[mid] === target) {
      return "有搜尋結果: 在第" + (mid + 1) + "項";
    } else {
      if (target > arr[mid]) {
        start = mid + 1;
      } else {
        end = mid - 1;
      }
    }
  }
  return "無搜尋結果";
}
console.log(interpolationSearch(data, target)); //"有搜尋結果: 在第4項"
#Interpolation Search
data = [10,20,30,40,50,60,70,80,90]
target = 40
def interpolationSearch(arr, target):
 
    start = 0
    end = len(arr)-1
 
    while start <= end:
        mid = (target - arr[start]) * (end - start) // (arr[end] - arr[start]) + start
        if target == arr[mid]:
            return "有搜尋結果: 在第" + str(mid+1) + "項"
        else:
            if target < arr[mid]:
                end = mid - 1
            else:
                start = mid + 1
    return "無搜尋結果"
print(interpolationSearch(data,target))#有搜尋結果: 在第4項